Btrfs je open source, univerzální souborový systém pro Linux. Název je odvozen od použití B-stromů k ukládání vnitřních struktur souborového systému. Pro systém souborů se používají různé názvy, včetně „Butter F S“ a „B-tree F S“. Vývoj Btrfs začal ve společnosti Oracle v roce 2007 a nyní se na vývoji podílí řada společností (včetně Red Hat, Fujitsu, Intel, SUSE a mnoha dalších). Btrfs je součástí hlavního linuxového jádra.
Snímky Btrfs
Dílčí svazky Btrfs mohou být snapshoty a klonovány, což vytváří další B-stromy. Snímek začíná jako kopie dílčího svazku pořízeného v určitém okamžiku. Můžete vytvořit snímek zapisovatelný a použít jej jako vyvíjející se klon původního dílčího svazku. Nebo můžete snímek použít jako stabilní obraz dílčího svazku pro účely zálohování nebo migrace na jiné systémy. Snímky lze vytvářet rychle a zpočátku zabírají velmi málo místa na disku.
Pomocí příkazu btrfs subvolume snapshot vytvořte zapisovatelný/čitelný snímek subvolume. Následující příklad vytvoří snímek podsvazku SV1:
# btrfs subvolume snapshot /btrfs/SV1 /btrfs/SV1/SV1-snap Create a snapshot of '/btrfs/SV1' in '/btrfs/SV1/SV1-snap'
Použijte snímek subvolume btrfs -r možnost vytvořit snímek pouze pro čtení:
# btrfs subvolume snapshot -r /btrfs/SV1 /btrfs/SV1-rosnap Create a readonly snapshot of '/btrfs/SV1' in '/btrfs/SV1-rosnap'
Při použití příkazu ls se snímky objeví jako běžný adresář. Snímky se také objeví ve výstupu příkazu btrfs subvolume list.
# btrfs subvolume list /btrfs ID 257 gen 10 top level 5 path SV1 ID 258 gen 9 top level 257 path SV1/SV1-snap ID 259 gen 10 top level 5 path SV1-rosnap
Pořízení snímku souboru
Můžete použít „cp –reflink ” pro pořízení snímku souboru. S touto volbou systém souborů nevytvoří nový odkaz ukazující na existující inode, ale místo toho vytvoří nový inode, který sdílí stejné bloky disku jako původní kopie. Zdá se, že nový soubor je kopií původního souboru, ale datové bloky nejsou duplikovány. To umožňuje téměř okamžité kopírování a také šetří místo na disku. Jak se obsah souboru v průběhu času liší, roste jeho velikost požadovaného úložiště. Jedním omezením je, že tato operace může fungovat pouze v rámci stejného souborového systému a ve stejném podsvazku.
Následující příklad zkopíruje soubor pomocí příkazu cp –reflink. Použitý prostor je dán před i po operaci kopírování. Všimněte si, že použitý prostor se nezvětší.
# df -hP /btrfs Filesystem Size Used Avail Use% Mounted on /dev/sda 10G 23M 8.0G 1% /btrfs
# cp --reflink /btrfs/SV1/vmlinuz-3.10.0-693.17.1.el7.x86_64 /btrfs/SV1/copy_of_vmlinuz
# df -h /btrfs Filesystem Size Used Avail Use% Mounted on /dev/sda 10G 23M 8.0G 1% /btrfs
Připojení dílčího svazku nebo snímku
Ve výchozím nastavení Linux připojí nadřazený svazek Btrfs, který má ID 0. V tomto příkladu byl před vytvořením jakýchkoli podsvazků a snímků zadán následující příkaz mount:
# mount /dev/sdb /btrfs
Podsvazek SV1 byl vytvořen v /btrfs. Příkaz ls zobrazí podsvazek:
# ls -l /btrfs total 0 drwxr-xr-x. 1 root root 84 Mar 29 11:01 SV1
Následující příklad zkopíruje soubory do SV1, vytvoří snímek SV1 a ověří, že podsvazek i snímek obsahují stejné soubory:
# cp -p /boot/vmlinuz-3.10.0-693.17.1.el7.x86_64 /btrfs/SV1
# btrfs sub snapshot /btrfs/SV1 /btrfs/SV1-snap Create a snapshot of '/btrfs/SV1' in '/btrfs/SV1-snap'
# ls /btrfs/SV1* /btrfs/SV1: vmlinuz-3.10.0-693.17.1.el7.x86_64 /btrfs/SV1-snap: vmlinuz-3.10.0-693.17.1.el7.x86_64
Pokud odpojíte /btrfs a znovu jej připojíte, bude výchozí svazek Btrfs připojen:
# ls /btrfs/ SV1 SV1-snap # umount /btrfs # mount /dev/sda /btrfs/ # ls /btrfs/ SV1 SV1-snap
Můžete však připojit podsvazek nebo snímek btrfs, jako by to bylo diskové zařízení. Pokud připojíte snímek místo jeho nadřazeného podsvazku, efektivně vrátíte stav systému souborů do doby, kdy byl snímek pořízen. Následující příklad zkopíruje soubor do SV1 tak, aby se obsah lišil od SV1-snap:
# cp testfile /btrfs/SV1
# ls -l /btrfs/SV1* /btrfs/SV1: total 5760 -rw-r--r--. 1 root root 19 Mar 29 11:44 testfile -rwxr-xr-x. 1 root root 5890720 Jan 25 20:26 vmlinuz-3.10.0-693.17.1.el7.x86_64 /btrfs/SV1-snap: total 5756 -rwxr-xr-x. 1 root root 5890720 Jan 25 20:26 vmlinuz-3.10.0-693.17.1.el7.x86_64
Chcete-li připojit podsvazek nebo snímek, musíte nejprve určit číslo ID podsvazku, který chcete připojit. K zobrazení čísel ID použijte příkaz btrfs subvolume list. V následujícím příkladu je ID kořenového podsvazku 257:
# btrfs sub list /btrfs ID 257 gen 12 top level 5 path SV1 ID 258 gen 9 top level 5 path SV1-snap
Použijte btrfs „subvolume set-default ” pro nastavení výchozího dílčího objemu systému souborů. Chcete-li například připojit podsvazek SV1 Btrfs, který má ID 257:
# btrfs subvolume set-default 257 /btrfs
Poté musíte odpojit a znovu připojit souborový systém Btrfs. Kořenová úroveň pak obsahuje obsah podsvazku SV1 a kořenový podsvazek již není viditelný:
# ls -l /btrfs total 5760 -rw-r--r--. 1 root root 19 Mar 29 11:44 testfile -rwxr-xr-x. 1 root root 5890720 Jan 25 20:26 vmlinuz-3.10.0-693.17.1.el7.x86_64
Můžete také použít „-o subvolid ” k příkazu mount pro připojení kořenového podsvazku nebo podsvazku nebo snímku. Chcete-li například připojit kořenový podsvazek:
# umount /btrfs # mount -o subvolid=5 /dev/sda /btrfs
# ls -l /btrfs total 0 drwxr-xr-x. 1 root root 84 Mar 29 11:44 SV1 drwxr-xr-x. 1 root root 68 Mar 29 11:17 SV1-snapJak vytvořit a připojit souborový systém Btrfs (vysvětleno na příkladech)
Jak změnit velikost/rozbalit svazek/systém souborů Btrfs