Sziasztok!
Azzal a problémával szembesültem, hogy btrfs filerendszerre nem tudok kiírni adatokat elsőre. Másodjára viszont sikerül. Nézzük az alábbi tesztkörnyezetet:
Hozzunk létre egy image file-t:
truncate -s 200M btrfs.img
Formázzuk meg btrfs-re úgy, hogy a kis méret miatt a metaadat és adat terület kevert legyen, s ne fussunk abba bele, hogy vagy a metaadat számára fenntartott hely fogy el, vagy az adatok számára fenntartott, duplikátum semmiből se legyen:
mkfs.btrfs -L home -d single -m single -M btrfs.img
SMALL VOLUME: forcing mixed metadata/data groups
WARNING! - Btrfs v3.12 IS EXPERIMENTAL
WARNING! - see http://btrfs.wiki.kernel.org before using
Turning ON incompat feature 'mixed-bg': mixed data and metadata block groups
Turning ON incompat feature 'extref': increased hardlink limit per file to 65536
Created a data/metadata chunk of size 8388608
fs created label home on btrfs.img
nodesize 4096 leafsize 4096 sectorsize 4096 size 200.00MiB
Btrfs v3.12
Hozzuk létre a csatolási pontot, majd csatoljuk fel a filerendszerünket tömörítés opcióval:
mkdir /mnt/home
mount -o loop,compress=lzo btrfs.img /mnt/home
Másoljunk rá adatokat. Ezek mindösszesen 66 MB terjedelműek:
rsync -a /home/locsemege/install/cd/hb/4/rootfs/home/ /mnt/home/
rsync: write failed on "/mnt/home/locsemege/.mozilla/firefox/g4byxabc.default/places.sqlite": No space left on device (28)
rsync error: error in file IO (code 11) at receiver.c(389) [receiver=3.1.0pre1]
Nézzük, mit mond a filerendszer utility-je:
btrfs fi df /mnt/home/
System, single: total=4.00MiB, used=4.00KiB
Data+Metadata, single: total=196.00MiB, used=13.39MiB
btrfs fi show
Label: home uuid: b2c38ec4-eac5-4ac4-ae7a-a5933541c65e
Total devices 1 FS bytes used 13.39MiB
devid 1 size 200.00MiB used 200.00MiB path /dev/loop0
Btrfs v3.12
Most töröljük le, amit csináltunk:
rm -Rf /mnt/home/*
ll /mnt/home/
total 0
btrfs fi show
Label: home uuid: b2c38ec4-eac5-4ac4-ae7a-a5933541c65e
Total devices 1 FS bytes used 13.39MiB
devid 1 size 200.00MiB used 200.00MiB path /dev/loop0
Btrfs v3.12
btrfs fi df /mnt/home/
System, single: total=4.00MiB, used=4.00KiB
Data+Metadata, single: total=196.00MiB, used=28.00KiB
Másoljuk újra ugyanazokat az adatokat:
rsync -a /home/locsemege/install/cd/hb/4/rootfs/home/ /mnt/home/
Hm... most sikerült! Ez hogy lehet?
btrfs fi show
Label: home uuid: b2c38ec4-eac5-4ac4-ae7a-a5933541c65e
Total devices 1 FS bytes used 26.30MiB
devid 1 size 200.00MiB used 200.00MiB path /dev/loop0
Btrfs v3.12
btrfs fi df /mnt/home/
System, single: total=4.00MiB, used=4.00KiB
Data+Metadata, single: total=196.00MiB, used=26.30MiB
A kernel a legfrissebb 3.12.6-os. Várom az ötleteket, javaslatokat!
Update1:
Lekérdeztem a filerendszer állapotát közvetlenül a formázást követő mount után. Körvonalazódni látszik a probléma, épp csak azt nem tudom, hogyan lehet kijavítani:
btrfs fi df /mnt/home/
System, single: total=4.00MiB, used=4.00KiB
Data+Metadata, single: total=8.00MiB, used=28.00KiB
btrfs fi show
Label: home uuid: 457c854b-275f-4193-a44f-613e9dd70a15
Total devices 1 FS bytes used 32.00KiB
devid 1 size 200.00MiB used 12.00MiB path /dev/loop0
Btrfs v3.12
Tehát, ha jól látom, az a baja, hogy a rendelkezésre álló 200 MB-ból csak 12 MB-ot foglal első körben a filerendszer. Ebből 4 MB elmegy rendszer célokra, 8 MB marad adatnak és metaadatnak együttesen. Erre viszont természetesen nem fér rá a 66 MB-nyi adat még tömörítve sem. Valami azt súgja, a btrfs automatikusan csinált online filerendszer átméretezést, ezért lehetett az, hogy másodjára sikerült a másolás.
Tehát az a kérdés, hogyan lehet forszírozni, hogy a létrejövő filerendszer valóban kihasználja azt a helyet, amekkora az a device, amit megformáztunk.