Команди които ще ползваме: ● mkfs.btrfs -m режим -d режим /dev/устройство1 .... - ● btrfs device scan - сканира цялата система за BTRFS ● btrfs device scan /dev/устройство - сканира определено устройство за наличие на BTRFS ● btrfs device add /dev/устройство2 /точка-на-монтиране - добавя устройство в BTRFS ● btrfs device delete /dev/устройство2 /точка-на-монтиране - премахва устройство от BTRFS ● btrfs filesystem balance /точка-на-монтиране - балансировка на файловата система, всички данни и метаданни ще се прочетат и презапишат ● btrfs fi balance /точка-на-монтиране - копие на горната команда ● btrfs balance start -dconvert=режим -mconvert=режим /точка-на-монтиране - конвертира режима на данни и метаданни във файловата система ● btrfs device delete /dev/устройство2 /точка-на-монтиране - заменяме устройство ако суперблока може да се прочете ● mount -o degraded /dev/устройство /точка-на-монтиране - ако суперблока не може да се прочете ● btrfs device delete missing /точка-на-монтиране - изтриване на развалено устройство
● mkfs.btrfs -m режим -d режим /dev/устройство1 .... - създава BTRFS файлова система с определени параметри -m - определя режим за съхранение на метаданни -d - определя режим за съхранение на данни Режимите могат да бъдат: single dub RAID0 RAID1 RAID5 RAID6 RAID10
Да проверим какво имаме:
lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda 8:0 0 11G 0 disk sdb 8:16 0 11G 0 disk sdc 8:32 0 11G 0 disk sdd 8:48 0 11G 0 disk sde 8:64 0 55G 0 disk ├─sde1 8:65 0 512M 0 part /boot/efi ├─sde2 8:66 0 53.5G 0 part / └─sde3 8:67 0 976M 0 part [SWAP] sr0 11:0 1 629M 0 rom
4 празни диска и на последния инсталирана ОС.
mkfs.btrfs -m single -d single /dev/sda -f btrfs-progs v6.2 See http://btrfs.wiki.kernel.org for more information. NOTE: several default settings have changed in version 5.15, please make sure this does not affect your deployments: - DUP for metadata (-m dup) - enabled no-holes (-O no-holes) - enabled free-space-tree (-R free-space-tree) Label: (null) UUID: 52cc00cf-eb42-426a-b0bc-32be78ae8d5a Node size: 16384 Sector size: 4096 Filesystem size: 11.00GiB Block group profiles: Data: single 8.00MiB Metadata: single 8.00MiB System: single 4.00MiB SSD detected: no Zoned device: no Incompat features: extref, skinny-metadata, no-holes Runtime features: free-space-tree Checksum: crc32c Number of devices: 1 Devices: ID SIZE PATH 1 11.00GiB /dev/sda
-f указва да се изпълни принудително командата (force),
mkfs.btrfs -m raid1 -d raid1 /dev/sdb /dev/sdc -f btrfs-progs v6.2 See http://btrfs.wiki.kernel.org for more information. NOTE: several default settings have changed in version 5.15, please make sure this does not affect your deployments: - DUP for metadata (-m dup) - enabled no-holes (-O no-holes) - enabled free-space-tree (-R free-space-tree) Label: (null) UUID: 92b6dba4-b48a-4c8f-a116-7b5a8201b285 Node size: 16384 Sector size: 4096 Filesystem size: 22.00GiB Block group profiles: Data: RAID1 1.00GiB Metadata: RAID1 256.00MiB System: RAID1 8.00MiB SSD detected: no Zoned device: no Incompat features: extref, skinny-metadata, no-holes Runtime features: free-space-tree Checksum: crc32c Number of devices: 2 Devices: ID SIZE PATH 1 11.00GiB /dev/sdb 2 11.00GiB /dev/sdc
По същата логика може да се изгради RAID0, RAID5, RAID6 и RAID10.
Понякога може да не видите някой BTRFS. То тогава трябва да сканирате или устройството или цялата система. Командите са: ● btrfs device scan - сканира цялата система за BTRFS ● btrfs device scan /dev/устройство - сканира определено устройство за наличие на BTRFS
Командите са: ● btrfs device add /dev/устройство2 /точка-на-монтиране - добавя устройство в BTRFS ● btrfs device delete /dev/устройство2 /точка-на-монтиране - премахва устройство от BTRFS ● btrfs filesystem balance /точка-на-монтиране - балансировка на файловата система, всички данни и метаданни ще се прочетат и презапишат (става много бавно, внимавайте кога пускате операцията по време на работа) ● btrfs fi balance /точка-на-монтиране - копие на горната команда След като добавите/изтриете устройството то няма да се използва докато не балансирате системата.
Нека RAID1 който създадохме да монтираме.
mount /dev/sdc /mnt
И да добавим BTRFS-a към монтирана точка.
btrfs device add /dev/sdd /mnt/
Да проверим:
btrfs fi df /mnt Data, RAID1: total=1.00GiB, used=0.00B System, RAID1: total=8.00MiB, used=16.00KiB Metadata, RAID1: total=256.00MiB, used=128.00KiB GlobalReserve, single: total=3.50MiB, used=0.00B btrfs fi show /mnt Label: none uuid: 92b6dba4-b48a-4c8f-a116-7b5a8201b285 Total devices 3 FS bytes used 144.00KiB devid 1 size 11.00GiB used 1.26GiB path /dev/sdb devid 2 size 11.00GiB used 1.26GiB path /dev/sdc devid 3 size 11.00GiB used 0.00B path /dev/sdd
Вижда се, че третия диск е наличен в RAID1 но не е балансиран.
btrfs fi balance /mnt/ Done, had to relocate 3 out of 3 chunks btrfs fi show /mnt Label: none uuid: 92b6dba4-b48a-4c8f-a116-7b5a8201b285 Total devices 3 FS bytes used 144.00KiB devid 1 size 11.00GiB used 288.00MiB path /dev/sdb devid 2 size 11.00GiB used 1.03GiB path /dev/sdc devid 3 size 11.00GiB used 1.25GiB path /dev/sdd
Всичко е точно.
Командите са: ● btrfs balance start -dconvert=режим -mconvert=режим /точка-на-монтиране - конвертира режима на данни и метаданни във файловата система -mconvert - определя режима на съхранение на метаданните -dconvert - определя режима на съхранение на данните Режимите могат да бъдат: single dub RAID0 RAID1 RAID5 RAID6 RAID10 За задачата ще ползваме 4 диска. Ще имитираме данните да са в RAID10, а метаданните в RAID1. За целта трием всичките BTRFS-и. След това изграждаме RAID1 от 3 диска както правихме до сега. След това вкарваме 4 диск с условие за RAID10 и RAID1.
### Демонтираме /mnt umount /mnt ### Трием всички BTRFS от /dev/sd* wipefs --all -t btrfs /dev/sd* ### Проверяваме BTRFS. Не трябва да има. btrfs fi show ###Изграждаме RAID1 от три диска. mkfs.btrfs -m raid1 -d raid1 /dev/sda /dev/sdb /dev/sdc -f btrfs-progs v6.2 See http://btrfs.wiki.kernel.org for more information. NOTE: several default settings have changed in version 5.15, please make sure this does not affect your deployments: - DUP for metadata (-m dup) - enabled no-holes (-O no-holes) - enabled free-space-tree (-R free-space-tree) Label: (null) UUID: f4a712a0-e6ba-460f-bdc6-1e542e7b6d51 Node size: 16384 Sector size: 4096 Filesystem size: 33.00GiB Block group profiles: Data: RAID1 1.00GiB Metadata: RAID1 256.00MiB System: RAID1 8.00MiB SSD detected: no Zoned device: no Incompat features: extref, skinny-metadata, no-holes Runtime features: free-space-tree Checksum: crc32c Number of devices: 3 Devices: ID SIZE PATH 1 11.00GiB /dev/sda 2 11.00GiB /dev/sdb 3 11.00GiB /dev/sdc ### Монтираме RAID1 mount /dev/sda /mnt ### Проверяваме df -h Filesystem Size Used Avail Use% Mounted on udev 3.9G 0 3.9G 0% /dev tmpfs 795M 684K 794M 1% /run /dev/sde2 53G 1.7G 49G 4% / tmpfs 3.9G 0 3.9G 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock /dev/sde1 511M 5.9M 506M 2% /boot/efi tmpfs 795M 0 795M 0% /run/user/0 tmpfs 795M 0 795M 0% /run/user/1000 /dev/sda 17G 3.7M 11G 1% /mnt
И сега добавяме 4 диск. Условието е данните да се записват в RAID10, а метаданните в RAID1.
### Добавяме 4-ти диск btrfs device add /dev/sdd /mnt/ ### Проверяваме BTRFS btrfs fi show Label: none uuid: f4a712a0-e6ba-460f-bdc6-1e542e7b6d51 Total devices 4 FS bytes used 144.00KiB devid 1 size 11.00GiB used 0.00B path /dev/sda devid 2 size 11.00GiB used 1.26GiB path /dev/sdb devid 3 size 11.00GiB used 1.26GiB path /dev/sdc devid 4 size 11.00GiB used 0.00B path /dev/sdd ### Конвертираме режима на данни и метаданни btrfs balance start -dconvert=raid10 -mconvert=raid1 /mnt/ Done, had to relocate 3 out of 3 chunks ### Проверяваме btrfs fi show /mnt Label: none uuid: f4a712a0-e6ba-460f-bdc6-1e542e7b6d51 Total devices 4 FS bytes used 144.00KiB devid 1 size 11.00GiB used 2.25GiB path /dev/sda devid 2 size 11.00GiB used 2.03GiB path /dev/sdb devid 3 size 11.00GiB used 2.03GiB path /dev/sdc devid 4 size 11.00GiB used 2.25GiB path /dev/sdd btrfs fi df /mnt/ Data, RAID10: total=4.00GiB, used=0.00B System, RAID1: total=32.00MiB, used=16.00KiB Metadata, RAID1: total=256.00MiB, used=128.00KiB GlobalReserve, single: total=3.50MiB, used=0.00B df -h Filesystem Size Used Avail Use% Mounted on udev 3.9G 0 3.9G 0% /dev tmpfs 795M 684K 794M 1% /run /dev/sde2 53G 1.7G 49G 4% / tmpfs 3.9G 0 3.9G 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock /dev/sde1 511M 5.9M 506M 2% /boot/efi tmpfs 795M 0 795M 0% /run/user/0 tmpfs 795M 0 795M 0% /run/user/1000 /dev/sda 22G 3.7M 22G 1% /mnt
Два варианта на замяна на устройство: АКО СУПЕРБЛОКА МОЖЕ ДА СЕ ПРОЧЕТЕ ● btrfs device delete /dev/устройство2 /точка-на-монтиране - заменяме устройство ако суперблока може да се прочете АКО СУПЕРБЛОКА НЕ МОЖЕ ДА СЕ ПРОЧЕТЕ ● mount -o degraded /dev/устройство /точка-на-монтиране - монтираме устройството в лош режим ● Добавяме ново устройство (по избор) ● btrfs device delete missing /точка-на-монтиране - изтриване на развалено устройство За демонстрацията ще развалим един диск. Примерно ще премахнем диск /dev/sdc. Спираме машината и махаме един диск.
poweroff
След рестарта и премахван на диска проверяваме състоянието на системата.
lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda 8:0 0 11G 0 disk sdb 8:16 0 11G 0 disk sdc 8:32 0 55G 0 disk ├─sdc1 8:33 0 512M 0 part /boot/efi ├─sdc2 8:34 0 53.5G 0 part / └─sdc3 8:35 0 976M 0 part [SWAP] sdd 8:48 0 11G 0 disk sr0 11:0 1 629M 0 rom
Даже подредбата на дисковете се промени. Да проверим и BTRFS-a
btrfs fi show Label: none uuid: f4a712a0-e6ba-460f-bdc6-1e542e7b6d51 Total devices 4 FS bytes used 144.00KiB devid 2 size 11.00GiB used 2.04GiB path /dev/sda devid 3 size 11.00GiB used 2.04GiB path /dev/sdb devid 4 size 11.00GiB used 2.25GiB path /dev/sdd *** Some devices missing
Имаме счупен RAID. Да проверим и монтирането на BTRFS.
df -h Filesystem Size Used Avail Use% Mounted on udev 3.9G 0 3.9G 0% /dev tmpfs 795M 656K 794M 1% /run /dev/sdc2 53G 1.7G 49G 4% / tmpfs 3.9G 0 3.9G 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock /dev/sdc1 511M 5.9M 506M 2% /boot/efi tmpfs 795M 0 795M 0% /run/user/1000
Нямаме монтиран BTRFS. Да се пробваме да монтираме.
mount /dev/sda /mnt mount: /mnt: wrong fs type, bad option, bad superblock on /dev/sda, missing codepage or helper program, or other error. dmesg(1) may have more information after failed mount system call.
Не може защото имаме лош супер блок, липсва кодирана страница или нещо друго... Да поправим проблема. Първо монтираме с опция degraded
mount -o degraded /dev/sda /mnt/
Да проверим BTRFS.
btrfs fi show /mnt/ Label: none uuid: f4a712a0-e6ba-460f-bdc6-1e542e7b6d51 Total devices 4 FS bytes used 144.00KiB devid 1 size 0 used 0 path MISSING devid 2 size 11.00GiB used 1.03GiB path /dev/sda devid 3 size 11.00GiB used 1.03GiB path /dev/sdb devid 4 size 11.00GiB used 1.25GiB path /dev/sdd
За да се избавим от липсващото устройство:
btrfs device delete missing /mnt btrfs fi show /mnt/ Label: none uuid: f4a712a0-e6ba-460f-bdc6-1e542e7b6d51 Total devices 3 FS bytes used 144.00KiB devid 2 size 11.00GiB used 288.00MiB path /dev/sda devid 3 size 11.00GiB used 1.28GiB path /dev/sdb devid 4 size 11.00GiB used 1.00GiB path /dev/sdd
Всичко работи правилно. В BTRFS-a имаме 3 устройства, работещи. Ако пък бяхте заменили разваления диск със здрав. То първо трябваше да добавите новия диск с btrfs device add /dev/sde /mnt и след това да се използва btrfs device delete missing /mnt
Няколко препоръки: ● Премахнете дублирането на метаданните ● Когато монтирате ползвайте ssd, nossd и ssd_spread Опцията ssd прави следното: - отделя клъстера за метаданни на голям размер - отделя данните последователно там където е възможно - отключва презаписването на дървото в съответствие последователността на ключа и блока - завършва фрагментацията на журнала без групировка на няколко процеса Опцията nossd - изключва опцията ssd диска да се монтира като такъв, просто ще се монтира като обикновен диск Опцията ssd_spread - отделя блокове без да се смесват