# BTRFS
- Fichero VagrantFile de la maquina con 4 discos adicionales
```
Vagrant.configure("2") do |config|
disco1='.vagrant/disco01.vdi'
disco2='.vagrant/disco02.vdi'
disco3='.vagrant/disco03.vdi'
disco4='.vagrant/disco04.vdi'
config.vm.define :btrfs do |btrfs|
btrfs.vm.box = "debian/buster64"
btrfs.vm.hostname = "btrfs"
btrfs.vm.provider :virtualbox do |v|
v.customize ["createhd", "--filename", disco1, "--size", 1024]
v.customize ["storageattach", :id, "--storagectl", "SATA Controller",
"--port", 1, "--device", 0, "--type", "hdd",
"--medium", disco1]
v.customize ["createhd", "--filename", disco2, "--size", 1024]
v.customize ["storageattach", :id, "--storagectl", "SATA Controller",
"--port", 2, "--device", 0, "--type", "hdd",
"--medium", disco2]
v.customize ["createhd", "--filename", disco3, "--size", 1024]
v.customize ["storageattach", :id, "--storagectl", "SATA Controller",
"--port", 3, "--device", 0, "--type", "hdd",
"--medium", disco3]
v.customize ["createhd", "--filename", disco4, "--size", 1024]
v.customize ["storageattach", :id, "--storagectl", "SATA Controller",
"--port", 4, "--device", 0, "--type", "hdd",
"--medium", disco4]
end
end
```
- Lista de los discos
```
vagrant@btrfs:~$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 19.8G 0 disk
├─sda1 8:1 0 18.8G 0 part /
├─sda2 8:2 0 1K 0 part
└─sda5 8:5 0 1021M 0 part [SWAP]
sdb 8:16 0 1G 0 disk
sdc 8:32 0 1G 0 disk
sdd 8:48 0 1G 0 disk
sde 8:64 0 1G 0 disk
```
- Instalar software
```
sudo apt install btrfs-tools
```
- Dar formato btrfs a un disco
```
vagrant@btrfs:~$ sudo mkfs.btrfs /dev/sdb
btrfs-progs v4.20.1
See http://btrfs.wiki.kernel.org for more information.
Label: (null)
UUID: 2ceb76ad-7f88-43d2-9346-d5add4087ba6
Node size: 16384
Sector size: 4096
Filesystem size: 1.00GiB
Block group profiles:
Data: single 8.00MiB
Metadata: DUP 51.19MiB
System: DUP 8.00MiB
SSD detected: no
Incompat features: extref, skinny-metadata
Number of devices: 1
Devices:
ID SIZE PATH
1 1.00GiB /dev/sdb
vagrant@btrfs:~$ lsblk -f
NAME FSTYPE LABEL UUID FSAVAIL FSUSE% MOUNTPOINT
sda
├─sda1 ext4 b9ffc3d1-86b2-4a2c-a8be-f2b2f4aa4cb5 16.4G 5% /
├─sda2
└─sda5 swap f8f6d279-1b63-4310-a668-cb468c9091d8 [SWAP]
sdb btrfs 2ceb76ad-7f88-43d2-9346-d5add4087ba6
sdc
sdd
sde
```
- Configuracion del soporte multidispositivo que lo interpreta como un RAID
```
vagrant@btrfs:~$ sudo mkfs.btrfs /dev/sdc /dev/sdd -f
btrfs-progs v4.20.1
See http://btrfs.wiki.kernel.org for more information.
Label: (null)
UUID: ae936953-d16f-4bc9-a52f-fd0ba84794bf
Node size: 16384
Sector size: 4096
Filesystem size: 2.00GiB
Block group profiles:
Data: RAID0 204.75MiB
Metadata: RAID1 102.38MiB
System: RAID1 8.00MiB
SSD detected: no
Incompat features: extref, skinny-metadata
Number of devices: 2
Devices:
ID SIZE PATH
1 1.00GiB /dev/sdc
2 1.00GiB /dev/sdd
vagrant@btrfs:~$ lsblk -f
NAME FSTYPE LABEL UUID FSAVAIL FSUSE% MOUNTPOINT
sda
├─sda1 ext4 b9ffc3d1-86b2-4a2c-a8be-f2b2f4aa4cb5 16.4G 5% /
├─sda2
└─sda5 swap f8f6d279-1b63-4310-a668-cb468c9091d8 [SWAP]
sdb btrfs 2ceb76ad-7f88-43d2-9346-d5add4087ba6
sdc btrfs ae936953-d16f-4bc9-a52f-fd0ba84794bf
sdd btrfs ae936953-d16f-4bc9-a52f-fd0ba84794bf
sde
```
## RAID
- Creacion de un RAID 1
```
vagrant@btrfs:~$ sudo mkfs.btrfs -d raid1 -m raid1 /dev/sdc /dev/sdd /dev/sde -f
btrfs-progs v4.20.1
See http://btrfs.wiki.kernel.org for more information.
Label: (null)
UUID: 6c73fc22-93e0-4152-be82-c015073d3ccb
Node size: 16384
Sector size: 4096
Filesystem size: 3.00GiB
Block group profiles:
Data: RAID1 153.56MiB
Metadata: RAID1 153.56MiB
System: RAID1 8.00MiB
SSD detected: no
Incompat features: extref, skinny-metadata
Number of devices: 3
Devices:
ID SIZE PATH
1 1.00GiB /dev/sdc
2 1.00GiB /dev/sdd
3 1.00GiB /dev/sde
```
- Tenemos el primer disco que le dimos formato y el raid 1 que hemos creado
```
vagrant@btrfs:~$ sudo btrfs filesystem show
Label: none uuid: 2ceb76ad-7f88-43d2-9346-d5add4087ba6
Total devices 1 FS bytes used 128.00KiB
devid 1 size 1.00GiB used 126.38MiB path /dev/sdb
Label: none uuid: 6c73fc22-93e0-4152-be82-c015073d3ccb
Total devices 3 FS bytes used 128.00KiB
devid 1 size 1.00GiB used 307.12MiB path /dev/sdc
devid 2 size 1.00GiB used 161.56MiB path /dev/sdd
devid 3 size 1.00GiB used 161.56MiB path /dev/sde
```
- Añadir otro disco al raid, montamos un disco del raid y luego lo añadimos
```
vagrant@btrfs:~$ sudo mount /dev/sdc /mnt/
vagrant@btrfs:~$ sudo btrfs device add /dev/sdb /mnt/ -f
vagrant@btrfs:~$ sudo btrfs filesystem show
Label: none uuid: 6c73fc22-93e0-4152-be82-c015073d3ccb
Total devices 4 FS bytes used 256.00KiB
devid 1 size 1.00GiB used 307.12MiB path /dev/sdc
devid 2 size 1.00GiB used 161.56MiB path /dev/sdd
devid 3 size 1.00GiB used 161.56MiB path /dev/sde
devid 4 size 1.00GiB used 0.00B path /dev/sdb
```
- Repartir la informacion de los demas discos en el disco recientemente añadido
```
vagrant@btrfs:~$ sudo btrfs balance start --full-balance /mnt/
Done, had to relocate 3 out of 3 chunks
vagrant@btrfs:~$ sudo btrfs filesystem show
Label: none uuid: 6c73fc22-93e0-4152-be82-c015073d3ccb
Total devices 4 FS bytes used 256.00KiB
devid 1 size 1.00GiB used 288.00MiB path /dev/sdc
devid 2 size 1.00GiB used 416.00MiB path /dev/sdd
devid 3 size 1.00GiB used 288.00MiB path /dev/sde
devid 4 size 1.00GiB used 416.00MiB path /dev/sdb
```
- Comprobar el estado del RAID
```
vagrant@btrfs:~$ sudo btrfs scrub status /mnt/
scrub status for 6c73fc22-93e0-4152-be82-c015073d3ccb
scrub started at Thu Jan 23 11:31:10 2020 and finished after 00:00:00
total bytes scrubbed: 512.00KiB with 0 errors
```
- Desconexion de disco 4 (/dev/sde) desde fichero vagrant
```
vagrant@btrfs:~$ sudo btrfs filesystem show
warning, device 4 is missing
Label: none uuid: 6c73fc22-93e0-4152-be82-c015073d3ccb
Total devices 4 FS bytes used 320.00KiB
devid 1 size 1.00GiB used 544.00MiB path /dev/sdb
devid 2 size 1.00GiB used 448.00MiB path /dev/sdc
devid 3 size 1.00GiB used 544.00MiB path /dev/sdd
*** Some devices missing
vagrant@btrfs:~$ lsblk -f
NAME FSTYPE LABEL UUID FSAVAIL FSUSE% MOUNTPOINT
sda
├─sda1 ext4 b9ffc3d1-86b2-4a2c-a8be-f2b2f4aa4cb5 16.4G 5% /
├─sda2
└─sda5 swap f8f6d279-1b63-4310-a668-cb468c9091d8 [SWAP]
sdb btrfs 6c73fc22-93e0-4152-be82-c015073d3ccb /mnt
sdc btrfs 6c73fc22-93e0-4152-be82-c015073d3ccb
sdd btrfs 6c73fc22-93e0-4152-be82-c015073d3ccb
```
- Eliminar disco del raid
```
vagrant@btrfs:~$ sudo btrfs device delete /dev/sde /mnt
```
- Añadir un nuevo volumen y añadirlo al RAID
```
vagrant@btrfs:~$ lsblk -f
NAME FSTYPE LABEL UUID FSAVAIL FSUSE% MOUNTPOINT
sda
├─sda1 ext4 b9ffc3d1-86b2-4a2c-a8be-f2b2f4aa4cb5 16.4G 5% /
├─sda2
└─sda5 swap f8f6d279-1b63-4310-a668-cb468c9091d8 [SWAP]
sdb btrfs 9c3c49e8-4a01-4b46-96e8-192a60abc584 758.8M 1% /mnt
sdc btrfs 9c3c49e8-4a01-4b46-96e8-192a60abc584
sdd btrfs 9c3c49e8-4a01-4b46-96e8-192a60abc584
sde
vagrant@btrfs:~$ sudo btrfs device add /dev/sde /mnt -f
vagrant@btrfs:~$ sudo btrfs filesystem show
Label: none uuid: 9c3c49e8-4a01-4b46-96e8-192a60abc584
Total devices 4 FS bytes used 256.00KiB
devid 1 size 1.00GiB used 416.00MiB path /dev/sdb
devid 2 size 1.00GiB used 288.00MiB path /dev/sdc
devid 3 size 1.00GiB used 288.00MiB path /dev/sdd
devid 4 size 1.00GiB used 416.00MiB path /dev/sde
```
# Creacion de subvolumenes
- Crear el dispositivo btrfs
```
vagrant@btrfs:~$ sudo mkfs.btrfs /dev/sdb /dev/sdc /dev/sdd /dev/sde -f -L 'Subvolumenes'
btrfs-progs v4.20.1
See http://btrfs.wiki.kernel.org for more information.
Label: Subvolumenes
UUID: 22d092b6-74c7-443e-8f25-c6df58fe315b
Node size: 16384
Sector size: 4096
Filesystem size: 4.00GiB
Block group profiles:
Data: RAID0 409.50MiB
Metadata: RAID1 204.75MiB
System: RAID1 8.00MiB
SSD detected: no
Incompat features: extref, skinny-metadata
Number of devices: 4
Devices:
ID SIZE PATH
1 1.00GiB /dev/sdb
2 1.00GiB /dev/sdc
3 1.00GiB /dev/sdd
4 1.00GiB /dev/sde
```
- Crear el grupo de volumenes
```
vagrant@btrfs:~$ sudo btrfs subvolume create /mnt/subvolumen1/
Create subvolume '/mnt/subvolumen1'
vagrant@btrfs:~$ sudo btrfs subvolume create /mnt/subvolumen2/
Create subvolume '/mnt/subvolumen2'
vagrant@btrfs:~$ sudo btrfs subvolume create /mnt/subvolumen3/
Create subvolume '/mnt/subvolumen3'
```
- Listar subvolumenes creados
```
vagrant@btrfs:~$ sudo btrfs subvolume list /mnt
ID 256 gen 6 top level 5 path subvolumen1
ID 259 gen 7 top level 5 path subvolumen2
ID 260 gen 8 top level 5 path subvolumen3
```
- Caracteristicas de los subvolumenes
```
vagrant@btrfs:~$ sudo btrfs subvolume show /mnt/subvolumen1/
subvolumen1
Name: subvolumen1
UUID: 21d51dc4-1991-1d4e-a63d-29cfb494548d
Parent UUID: -
Received UUID: -
Creation time: 2020-01-24 11:00:31 +0000
Subvolume ID: 256
Generation: 6
Gen at creation: 6
Parent ID: 5
Top level ID: 5
Flags: -
Snapshot(s):
```
- Montado de un subvolumen
```
vagrant@btrfs:~$ sudo mount -o subvolid=256 /dev/sdb /mnt/montadosubvolumenes/
vagrant@btrfs:~$ sudo df -h
Filesystem Size Used Avail Use% Mounted on
udev 227M 0 227M 0% /dev
tmpfs 49M 3.4M 45M 7% /run
/dev/sda1 19G 1019M 17G 6% /
tmpfs 242M 0 242M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 242M 0 242M 0% /sys/fs/cgroup
tmpfs 49M 0 49M 0% /run/user/1000
/dev/sdb 4.0G 17M 3.6G 1% /mnt
/dev/sdb 4.0G 17M 3.6G 1% /mnt/montadosubvolumenes
```
## Snapshot de subvolumemes
- Crear un snapshot de un volumen
```
vagrant@btrfs:~$ sudo btrfs subvolume snapshot /mnt/subvolumen1/ /mnt/snapshotsubvolumen1
Create a snapshot of '/mnt/subvolumen1/' in '/mnt/snapshotsubvolumen1'
vagrant@btrfs:~$ ls -l /mnt/
total 0
drwxr-xr-x 1 root root 0 Jan 24 11:00 montadosubvolumenes
drwxr-xr-x 1 root root 0 Jan 24 11:00 snapshotsubvolumen1
drwxr-xr-x 1 root root 0 Jan 24 11:00 subvolumen1
drwxr-xr-x 1 root root 0 Jan 24 11:00 subvolumen2
drwxr-xr-x 1 root root 0 Jan 24 11:00 subvolumen3
```
## Redimensión de volumenes
- Informacion de volumenes
```
vagrant@btrfs:~$ sudo btrfs filesystem show /mnt
Label: 'Subvolumenes' uuid: 22d092b6-74c7-443e-8f25-c6df58fe315b
Total devices 4 FS bytes used 320.00KiB
devid 1 size 1.00GiB used 307.12MiB path /dev/sdb
devid 2 size 1.00GiB used 307.12MiB path /dev/sdc
devid 3 size 1.00GiB used 110.38MiB path /dev/sdd
devid 4 size 1.00GiB used 110.38MiB path /dev/sde
vagrant@btrfs:~$ lsblk -f
NAME FSTYPE LABEL UUID FSAVAIL FSUSE% MOUNTPOINT
sda
├─sda1 ext4 b9ffc3d1-86b2-4a2c-a8be-f2b2f4aa4cb5 16.4G 5% /
├─sda2
└─sda5 swap f8f6d279-1b63-4310-a668-cb468c9091d8 [SWAP]
sdb btrfs Subvolumenes 22d092b6-74c7-443e-8f25-c6df58fe315b 3.6G 0% /mnt
sdc btrfs Subvolumenes 22d092b6-74c7-443e-8f25-c6df58fe315b
sdd btrfs Subvolumenes 22d092b6-74c7-443e-8f25-c6df58fe315b
sde btrfs Subvolumenes 22d092b6-74c7-443e-8f25-c6df58fe315b
```
- Reducir el tamaño de volumen /dev/sdb para que use 512MB (se especifica la cantidad que queremos quitarle o darle)
```
vagrant@btrfs:~$ sudo btrfs filesystem resize -512m /mnt/
Resize '/mnt/' of '-512m'
vagrant@btrfs:~$ sudo btrfs filesystem show /mnt
Label: 'Subvolumenes' uuid: 22d092b6-74c7-443e-8f25-c6df58fe315b
Total devices 4 FS bytes used 320.00KiB
devid 1 size 512.00MiB used 307.12MiB path /dev/sdb
devid 2 size 1.00GiB used 307.12MiB path /dev/sdc
devid 3 size 1.00GiB used 110.38MiB path /dev/sdd
devid 4 size 1.00GiB used 110.38MiB path /dev/sde
```
- Volver a aumentar el tamaño de volumen
```
vagrant@btrfs:~$ sudo btrfs filesystem resize +512m /mnt/
Resize '/mnt/' of '+512m'
vagrant@btrfs:~$ sudo btrfs filesystem show /mnt
Label: 'Subvolumenes' uuid: 22d092b6-74c7-443e-8f25-c6df58fe315b
Total devices 4 FS bytes used 320.00KiB
devid 1 size 1.00GiB used 307.12MiB path /dev/sdb
devid 2 size 1.00GiB used 307.12MiB path /dev/sdc
devid 3 size 1.00GiB used 110.38MiB path /dev/sdd
devid 4 size 1.00GiB used 110.38MiB path /dev/sde
```
## Desframentacion de volumenes
- Desfragmentar un volumen
```
vagrant@btrfs:~$ sudo btrfs filesystem defrag /mnt/
```
## Cifrado de volumenes
- Paquete necesario para cifrar cryptsetup
```
vagrant@btrfs:~$ sudo apt install cryptsetup
```
- Creamos un keyfile con el comando dd con el usuario root en su directorio (tarda bastante)
```
root@btrfs:~# dd if=/dev/urandom of=/root/KeyFile bs=1 count=4096
4096+0 records in
4096+0 records out
4096 bytes (4.1 kB, 4.0 KiB) copied, 0.0294735 s, 139 kB/s
root@btrfs:~# ls -l
total 4
-rw-r--r-- 1 root root 4096 Jan 25 14:51 KeyFile
```
- Cambiarle los permisos al fichero keyfile
```
root@btrfs:~# chmod 0400 /root/KeyFile
```
- Cifraremos el disco /dev/sdc con la clave creada anteriormente
```
root@btrfs:~# cryptsetup luksFormat --key-file /root/KeyFile /dev/sdc
WARNING: Device /dev/sdc already contains a 'btrfs' superblock signature.
WARNING!
========
This will overwrite data on /dev/sdc irrevocably.
Are you sure? (Type uppercase yes): YES
```
- Abrir el disco cifrado
```
root@btrfs:~# cryptsetup open /dev/sdc /dev/sdc
```