За начало да споделя, че съм ползвал помощна информация от Файловая система BTRFS в CentOS 7.
Основните команди които ще разгледаме са: ● mkfs.btrfs /dev/устройство - създаване на проста файлова система BTRFS ● mkfs.btrfs /dev/устройство1 /dev/устройство2 - създаване на BTRFS на няколко устройства ● mount /dev/устройство /точка-на-монтиране - монтиране на файловата система ● btrfs device scan - сканиране на системата за BTRFS файлови системи ● btrfs filesystem show - показване налични BTRFS-и ● btrfs fi show - показване налични BTRFS-и, както горната команда но съкратено ● btrfs filesystem resize (+|-) обем / точка-на-монтиране - увеличава/намалява размера на BTRFS обема може да е в: K,k-килобайти | М,м-мегабайти | G,g - гигабайти ● btrfs filesystem resize id:обем / точка-на-монтиране - задаваме твърд размер на BTRFS ● ● ● ● ● ● Да разгледаме какви дискове имаме и какво ще правим.
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 празни диска. На sde е инсталиран Debian. Първите 4 диска са SATA, а последния е SSD. За начало обаче е необходимо да инсталираме помощните пакети на BTRFS.
sudo apt update -y sudo apt upgrade -y apt-cache search '^btrfs' btrfs-compsize - calculate compression ratio of a set of files on btrfs btrfs-heatmap - Visualize the layout of data on your btrfs filesystem btrfs-progs - Checksumming Copy on Write Filesystem utilities btrfsmaintenance - automate btrfs maintenance tasks on mountpoints or directories golang-github-containerd-btrfs-dev - Btrfs bindings for Go golang-github-dennwc-btrfs-dev - btrfs library for Go libblockdev-btrfs-dev - BTRFS plugin for libblockdev - development libblockdev-btrfs2 - BTRFS plugin for libblockdev monitoring-plugins-btrfs - btrfs plugin for nagios compatible monitoring systems udisks2-btrfs - BTRFS support for udisks2 sudo apt install btrfs-progs -y
Вече може да създаваме дискове с файлова система BTRFS. Да създадем BTRFS на /dev/sda
sudo mkfs.btrfs /dev/sda 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: 5f5b552d-dadc-47d0-ba99-082a3428c17b Node size: 16384 Sector size: 4096 Filesystem size: 11.00GiB Block group profiles: Data: single 8.00MiB Metadata: DUP 256.00MiB System: DUP 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: 1 Devices: ID SIZE PATH 1 11.00GiB /dev/sda
Забележете, файловата система е 11GB. Данните (Data) са single. Това означава, че са записани еднократно. Метаданните (Metadata) са DUP. Това значи, че са дублирани. На практика заемат 2х265МВ=512МВ. Системните данни също са дублирани. Между другото ако се чудите какво представляват метаданните, това са папки, структура на дървото, имена на файлове, дата, час, разширения, къде се намира файла и т.н. И да се върнем на размера на файловата система. Разбрахме, че имаме резервирано място за метаданни в размер на 512МВ. Това означава, че имаме място за данни във файловата система BTRFS 11GB-0.5GB=10.5GB. Да създадем едновременно 2 диска с BTRFS.
sudo mkfs.btrfs /dev/sdb /dev/sdc 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: 0f69fe55-628f-4190-a2f7-5e671dcb3091 Node size: 16384 Sector size: 4096 Filesystem size: 22.00GiB Block group profiles: Data: single 8.00MiB 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
Забележете, че мястото на файловата система е 22GB. Все едно имаме RAID0. Обаче метаданните и системните данни се съхраняват в RAID1. Отново са дублирани но в RAID1. И логически разсъждавайки имаме място за данни 22GB-0.25GB-0.25GB=21.5GB. За накрая забележете, че BTRFS-a който създадохме се състои от 2 диска.
Продължавам с горния пример, където създадохме BTRFS от два диска.
sudo mount /dev/sdc /mnt
И да проверим как се е монтирала.
sudo mount | tail -n1 /dev/sdc on /mnt type btrfs (rw,relatime,space_cache=v2,subvolid=5,subvol=/)
Забележете монтирахме само /dev/sdc. Монтира се само единия диск, без значение дали ще е /dev/sdb или /dev/sdc. Да проверим.
sudo df -h Filesystem Size Used Avail Use% Mounted on udev 3.9G 0 3.9G 0% /dev tmpfs 795M 668K 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/sdc 22G 3.8M 22G 1% /mnt
Имаме монтиран /dev/sdc но размра му е 22GB. Това означава, че са монтирани в RAID0 /dev/sdb и /dev/sdc Можем и да размонтираме диска.
sudo umount /mnt
На практика монтирането може да е с много опции. Горните примери са в много опростен вид.
Ако по някаква причина не откривате устройство или устройства с BTRFS можете да сканирате системата за налични такива.
sudo btrfs device scan Scanning for Btrfs filesystems registered: /dev/sdb registered: /dev/sdc registered: /dev/sda
Да погледнем сега какви налични BTRFS имаме.
sudo btrfs filesystem show sudo btrfs fi show Label: none uuid: 0f69fe55-628f-4190-a2f7-5e671dcb3091 Total devices 2 FS bytes used 144.00KiB devid 1 size 11.00GiB used 272.00MiB path /dev/sdb devid 2 size 11.00GiB used 264.00MiB path /dev/sdc Label: none uuid: 5f5b552d-dadc-47d0-ba99-082a3428c17b Total devices 1 FS bytes used 144.00KiB devid 1 size 11.00GiB used 536.00MiB path /dev/sda
Показва налични BTRFS-и и как изглеждат. Освен това имаме UUID на системите им. На по-късен етап UUID ще е необходим за /etc/fstab.
Да запишем UUID в /etc/fstab.
sudo su btrfs filesystem show >> /etc/fstab
Да редактираме /etc/fstab, така че BTRFS-ите автоматично да се заредят след рестарт на системата.
nano /etc/fstab
#
Размонтирваме всички BTRFS-и.
mount | grep btrfs /dev/sdb on /mnt type btrfs (rw,relatime,space_cache=v2,subvolid=5,subvol=/) umount /mnt
Монтираме всичко което е във файла /etc/fstab. Имитираме, че зареждаме /etc/fstab след рестарт на системата.. Преди това обаче трябва да създадем две папки.
mkdir /mnt/{single,double} mount -a mount: (hint) your fstab has been modified, but systemd still uses the old version; use 'systemctl daemon-reload' to reload. systemctl daemon-reload
Да проверим какво сме монтирали.
mount | tail -n5 binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,nosuid,nodev,noexec,relatime) tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,size=813080k,nr_inodes=203270,mode=700,inode64) tmpfs on /run/user/1000 type tmpfs (rw,nosuid,nodev,relatime,size=813080k,nr_inodes=203270,mode=700,uid=1000,gid=1000,inode64) /dev/sda on /mnt/single type btrfs (rw,relatime,space_cache=v2,subvolid=5,subvol=/) /dev/sdb on /mnt/double type btrfs (rw,relatime,space_cache=v2,subvolid=5,subvol=/)
Всичко е правилно, значи след рестарта BTRFS-ите ще се заредят.
Няколко примера.
btrfs filesystem resize -1g /mnt/single/ Resize device id 1 (/dev/sda) from 11.00GiB to 10.00GiB btrfs filesystem show Label: none uuid: 5f5b552d-dadc-47d0-ba99-082a3428c17b Total devices 1 FS bytes used 144.00KiB devid 1 size 10.00GiB used 536.00MiB path /dev/sda Label: none uuid: 0f69fe55-628f-4190-a2f7-5e671dcb3091 Total devices 2 FS bytes used 144.00KiB devid 1 size 11.00GiB used 272.00MiB path /dev/sdb devid 2 size 11.00GiB used 264.00MiB path /dev/sdc btrfs filesystem resize 1:5G /mnt/double Resize device id 2 (/dev/sdc) from 11.00GiB to 5.00GiB btrfs filesystem resize 2:-6G /mnt/double Resize device id 2 (/dev/sdc) from 11.00GiB to 5.00GiB
ВНИМАНИЕ !!! Променяме размера на файловата система в диска, а не размера на диска. Да проверим:
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 10G 3.8M 9.5G 1% /mnt/single /dev/sdb 10G 3.8M 9.5G 1% /mnt/double
Да проверим BTRFS-a на двата диска.
btrfs filesystem show /mnt/double Label: none uuid: 0f69fe55-628f-4190-a2f7-5e671dcb3091 Total devices 2 FS bytes used 144.00KiB devid 1 size 5.00GiB used 272.00MiB path /dev/sdb devid 2 size 5.00GiB used 264.00MiB path /dev/sdc
Файловата система е 10GB но двата диска са по 10GB значи общо е 20GB. Не забравяйте, че метаданните заемат двойно място. Значи файловата система за данни не е чисто 10GB. Да проверим.
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 10G 3.8M 9.5G 1% /mnt/single /dev/sdb 10G 3.8M 9.5G 1% /mnt/double
Когато проверявате дадена файлова система то тя трябва да е размонтирана.
btrfsck /dev/sda Opening filesystem to check... Checking filesystem on /dev/sda UUID: 5f5b552d-dadc-47d0-ba99-082a3428c17b [1/7] checking root items [2/7] checking extents [3/7] checking free space tree [4/7] checking fs roots [5/7] checking only csums items (without verifying data) [6/7] checking root refs [7/7] checking quota groups skipped (not enabled on this FS) found 147456 bytes used, no error found total csum bytes: 0 total tree bytes: 147456 total fs tree bytes: 32768 total extent tree bytes: 16384 btree space waste bytes: 140455 file data blocks allocated: 0 referenced 0
Първо демонтираме BTRFS-ите които ще трием.
mount | grep btrfs /dev/sdb on /mnt/double type btrfs (rw,relatime,space_cache=v2,subvolid=5,subvol=/) umount /mnt/double
Проверяваме за BTRFS.
btrfs fi show Label: none uuid: 0f69fe55-628f-4190-a2f7-5e671dcb3091 Total devices 2 FS bytes used 144.00KiB devid 1 size 5.00GiB used 272.00MiB path /dev/sdb devid 2 size 5.00GiB used 264.00MiB path /dev/sdc Label: none uuid: 965a090d-2030-42d7-82d6-717b4734c2e6 Total devices 1 FS bytes used 144.00KiB devid 1 size 11.00GiB used 536.00MiB path /dev/sda
И да изтрием BTRFS на /dev/sdb и /dev/sdc.
wipefs --all -t btrfs /dev/sdb /dev/sdc /dev/sdb: 8 bytes were erased at offset 0x00010040 (btrfs): 5f 42 48 52 66 53 5f 4d /dev/sdc: 8 bytes were erased at offset 0x00010040 (btrfs): 5f 42 48 52 66 53 5f 4d
Да проверим.
btrfs fi show Label: none uuid: 965a090d-2030-42d7-82d6-717b4734c2e6 Total devices 1 FS bytes used 144.00KiB devid 1 size 11.00GiB used 536.00MiB path /dev/sda
Ако искате да изтриете всички sd устройства то:
wipefs --all -t btrfs /dev/sd*