Portál AbcLinuxu, 30. dubna 2025 10:07
Skutocne je nutne na zmirrorovanie dat z jedneho disku na druhy mat volnych ~50% disku?
Není. Alokační grupa BTRFS je 1GB, to znamená, že pokud na tom disku bylo 7GB dat, tak už tam nemuselo být dostatek místa pro přesuny 1GB balíků dat.
BTRFS je stavěno na velký disky (tuhle facebook řešil rychlost mazání xTB souborů), zkoušet to na 8GB není ten nejlepší scénář.
Já mám 4+3TB disky v BTRFS raid1 a výměna disků a konverze (raid 1 - raid10) je no problémo. Při 80% zaplnění.
Mam raid-1 pole zo sda,sdb,sdc,sdd. Umre mi sdc, ale nemam ziaden dalsi volny sata port, takze musim vymenit sdc za nove sdc. Ide to?
Jde. Prostě vytáhneš vadný sdc, uděláš btrfs device delete missing (umount, mount -o degraded, delete ... - pokud už to někdo neopravil) a potom device add , balance a je to. Taky mám plný sata sloty a 3TB seagaty odcházej (zatím teda jen dva). Jen je blbý, že se to nedá udělat za běhu a musí tam být ten umount, mount -o degraded. (Alespoň na 3.16, na 4.2 jsem to zatím netestoval.)
Total devices 3 FS bytes used 2.00GiB devid 1 size 8.00GiB used 1.28GiB path /dev/loop1 devid 2 size 8.00GiB used 2.28GiB path /dev/loop2 devid 3 size 8.00GiB used 3.00GiB path /dev/loop3 warning, device 2 is missing warning devid 2 not found already root@debian:~/tmp# btrfs d delete missing mnt/... a zasek, nic sa nedeje, ziadna io aktivita, proste nic.
Ten výpis je nějaký divný. Píše dev 2 missing, ale dev 2 ve výpisu je.
Ráno se na to zkusím u ranní kávy mrknout, toto si obvykle zkouším ve virtuálce, s loopy jsem nikdy příliš nepracoval (jen readonly mount iso souboru). Teď jsem v rychlosti došel k tomuto:
losetup -d /dev/loop2 losetup -a /dev/loop1: [0209]:257 (/home/test/disk1) /dev/loop3: [0209]:259 (/home/test/disk3)
loop2 chybí, což je správně. Jenže:
mount /dev/loop1 /mnt/btest
Neprojde, což se dá očekávat. Potom:
mount /dev/loop1 /mnt/btest -o degraded btrfs fi show /mnt/btest Total devices 2 FS bytes used 2.93GiB devid 1 size 100.00GiB used 4.03GiB path /dev/loop1 devid 2 size 100.00GiB used 4.03GiB path /dev/loop2
Kde se tam vzala /dev/loop2
?
Nevím, s loopy nepracuji, nevím, jak je vidí kernel. Userspace programy (fdisk
) vidí loop1
(správně upozorní na btrfs signaturu), loop3
jako čisté blokové zařízení (ten jsem ještě nepoužil), ale na loop2
nemůže (správně) přistupovat. Kernel ovladač btrfs jej však vidí. Důvod neznám.
Toto se u reálného zařízení nestalo, to tam prostě bezpečně není. Takže to vyzkoušej když tak ve virtuálce (vypnout, odebrat zařízení, zapnout), tady se to evidentně hádá s loopem.
Total devices 3 FS bytes used 2.93GiB devid 1 size 8.00GiB used 1.28GiB path /dev/sdb devid 3 size 8.00GiB used 3.00GiB path /dev/sdd *** Some devices missing warning, device 2 is missing
b d delete missing mnt/... zasek, nic sa nedeje. Mam ten pocit, ze tomuto (zjavne stale experimentalnemu) fs svoje data nezverim, aj ked featury ma dost lakaju ...
Počáteční stav, tři disky na hraní:
/dev/sdb /dev/sdc /dev/sdd
Vytvoříme btrfs single
mkfs.btrfs /dev/sdb
mount /dev/sdb /mnt/test
Dáme tam pár dat:
for i in `seq 1 30`; do dd if=/dev/zero of=file$i bs=1M count=100; doneJak jsme na tom:
btrfs fi show Label: none uuid: 01396906-eb6f-43d5-9b38-59bca8363b6e Total devices 1 FS bytes used 2.84GiB devid 1 size 100.00GiB used 5.04GiB path /dev/sdb
Přidáme disk a uděláme raid1:
btrfs device add /dev/sdc /mnt/test Label: none uuid: 01396906-eb6f-43d5-9b38-59bca8363b6e Total devices 2 FS bytes used 2.93GiB devid 1 size 100.00GiB used 5.04GiB path /dev/sdb devid 2 size 100.00GiB used 0.00B path /dev/sdc btrfs balance start -mconvert=raid1 -dconvert=raid1 /mnt/test Label: none uuid: 01396906-eb6f-43d5-9b38-59bca8363b6e Total devices 2 FS bytes used 2.93GiB devid 1 size 100.00GiB used 6.03GiB path /dev/sdb devid 2 size 100.00GiB used 6.03GiB path /dev/sdc
Potud vše ok. Vyrveme disk sdc, původní sdd se nám přečísluje na sdc:
ls /dev/sd* /dev/sdb /dev/sdc
Zkusíme to namountovat:
mount /dev/sdb /mnt/test mount: wrong fs type, bad option, bad superblock on /dev/sdb, missing codepage or helper program, or other error In some cases useful info is found in syslog - try dmesg | tail or so.
Nejde, máme málo disků, takže degraded:
root@debian:~# mount /dev/sdb /mnt/test -o degraded Label: none uuid: 01396906-eb6f-43d5-9b38-59bca8363b6e Total devices 2 FS bytes used 2.93GiB devid 1 size 100.00GiB used 6.03GiB path /dev/sdb *** Some devices missing
Správně, nějaké zařízení chybí. Takže odstraníme missing:
btrfs device delete missing /mnt/test ERROR: error removing the device 'missing' - unable to go below two devices on raid1
Správně nejde, nemáme disky na požadovaný raid level. Strčíme tam nový disk:
btrfs device add /dev/sdc /mnt/test btrfs device delete missing /mnt/test Label: none uuid: 01396906-eb6f-43d5-9b38-59bca8363b6e Total devices 2 FS bytes used 2.93GiB devid 1 size 100.00GiB used 4.03GiB path /dev/sdb devid 3 size 100.00GiB used 4.03GiB path /dev/sdc
Přemountíme do normálního režimu:
umount /mnt/test mount /dev/sdb /mnt/test
A vše je ok:
Label: none uuid: 01396906-eb6f-43d5-9b38-59bca8363b6e Total devices 2 FS bytes used 2.93GiB devid 1 size 100.00GiB used 4.03GiB path /dev/sdb devid 3 size 100.00GiB used 4.03GiB path /dev/sdc
Jak se btrfs staví k situaci, kdy z disku nejde přečíst sektor (a disk jej, dokud do něj nezapíšeš, nepřealokuje)?Teoreticky by měl data přečíst z jiného disku. Bohužel, desktoptové disky čtou tak dlouho až přečtou a s tím btrfs nic neudělá. Jak správně píšeš, raid disky mají TLER a chybu vrátí rozumně rychle.
Nevím, já mám btrfs 5+ let, začínal jsem kdysi na 2.6.18 CentOS5Tak to jsi dobrej střelec :). Já jsem se odvážil teprve nedávno a zatím dobré, jenom když to něco dělá (třeba teď ten balance), tak jsou v IO na systému několikasekundové lagy (např. :w ve vimu zřetelně trvá, i když edituju soubor na jiné partition stejného disku). To se při resyncu MD nedělo. WTF moment byl, když jsem zjistil, že mi -o compress=zlib nekomprimuje accesslogy. Nechápu. S compress-force to funguje.
Tak to jsi dobrej střelec :).Tento článek je z roku 2011, pochopitelně jsem s tím začal před psaním. Trochu mě mrzí, že se tady na abíčku vytratila paměť a lidi (i stálice na portálu) k sobě vzájemně přistupují jako tabula rasa. Ale tak zapomenout může každý. Taky zapomínám.
A je nutne, aby na disku, ktory ma 8GB a 4.4GB suborov bolo "used 6.33GiB"?To není used ve smysl zabraného místa soubory, ale velikost fs na daném blokovém zařízení. Když pustíš
balance -dusage=0
, tak projde "prázdné" bloky a toto číslo se sníží. Po nějaké době provozu bude ve výpisu fi show
used stejně velký jako je blokové zařízení pod ním. Opět, pomocí balance
, nebo třeba resize
(btrfs umí za běhu zmenšit použité místo na daném blokovém zařízení a toto zařízení můžeš potom zmenšit (třeba lvreduce, pokud je to nad lvm)), můžeš toto číslo snížit. Ale není k tomu důvod.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.