====== Criar partições e sistemas de arquivos em arquivos de imagem ======
Para fazer uso de arquivos ou arquivos de imagem para criar particoes e sistemas de arquivos precisamos utilizar o módulo do kernel "loop". E mesmo utilizando ele ele possue suporte a apenas 1 partição se você tiver mais de 1 partição na imagem não funcionará. Como verifico isso? existe no sistema de arquivos SYS uma variável que informa isso
root@:~# cat /sys/module/loop/parameters/max_part
0
root@:~#
Este deve ser o valor padrão. Este valor define a quantidade de partições teremos no nosso sistema de arquivos em arquivo.
===== Aumentando a capacidade de partições em arquivos de imagem =====
Se o módulo loop estiver compilado como módulo, derrube o módulo e carregue passsando a opção **max_part** maxima quantidade de partições.
root@:~# modprobe -r loop
root@:~# modprobe loop max_part=31
Para tornar essa configuração persistente adicione o seguinte conteúdo ao aquivo /etc/modprobe.conf ou /etc/modprobe.d
options loop max_part=31
Caso o módulo esteja compilado no kernel em Build-in, você constata-rá isso quando tentar executar o comando "modprobe -r loop"
root@:~# modprobe -r loop
modprobe: FATAL: Module loop is builtin.
root@:~#
Caso isso aconteça você precisará adicionar o parametro loop.max_part=31 para o kernel na inicialização. Caso seu bootloader for o Grub2 adiciona esse parametro na variavel GRUB_CMDLINE_LINUX dentro do arquivo "/etc/defaut/grub", e atualize o grub.
root@:~# update-grub2
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-4.4.0-31-generic
Found initrd image: /boot/initrd.img-4.4.0-31-generic
done
root@:~#
Após isso e necessário somente reiniciar o computador. Logo após a reinicialização verifica a variação max_part no sistema de arquivos /sys.
root@:~# cat /sys/module/loop/parameters/max_part
31
root@:~#
Agora vamos criar ou alocar um espaço de arquivo. Você pode fazer isso de várias formas, via comando dd, um vhd de uma maquina virtual, etc. Eu irei utilizar o comando **fallocate**, então para criar uma área de 200M digito o comando.
root@:~# fallocate -l 200M disco.img
root@:~# file disco.img
disco.img: DOS/MBR boot sector; partition 1 : ID=0xee, start-CHS (0x0,0,2), end-CHS (0x19,126,37), startsector 1, 409599 sectors, extended partition table (last)
root@:~# ls -lh disco.img
-rw-r--r-- 1 root root 200M Nov 29 10:54 disco.img
root@:~#
Podemos agora criar uma partição GPT. Faremos isso com o comando gdisk
root@:~# gdisk disco.img
GPT fdisk (gdisk) version 1.0.1
Partition table scan:
MBR: not present
BSD: not present
APM: not present
GPT: not present
Creating new GPT entries.
Command (? for help): p
Disk disco2.img: 409600 sectors, 200.0 MiB
Logical sector size: 512 bytes
Disk identifier (GUID): C47B4E81-E529-4AAF-8A24-42DD7092463D
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 409566
Partitions will be aligned on 2048-sector boundaries
Total free space is 409533 sectors (200.0 MiB)
Number Start (sector) End (sector) Size Code Name
Command (? for help): n
Partition number (1-128, default 1): 1
First sector (34-409566, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-409566, default = 409566) or {+-}size{KMGTP}: +90M
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'
Command (? for help): n
Partition number (2-128, default 2):
First sector (34-409566, default = 186368) or {+-}size{KMGTP}:
Last sector (186368-409566, default = 409566) or {+-}size{KMGTP}:
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'
Command (? for help): p
Disk disco2.img: 409600 sectors, 200.0 MiB
Logical sector size: 512 bytes
Disk identifier (GUID): C47B4E81-E529-4AAF-8A24-42DD7092463D
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 409566
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)
Number Start (sector) End (sector) Size Code Name
1 2048 186367 90.0 MiB 8300 Linux filesystem
2 186368 409566 109.0 MiB 8300 Linux filesystem
Command (? for help): w
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!
Do you want to proceed? (Y/N): Y
OK; writing new GUID partition table (GPT) to disco2.img.
Warning: The kernel is still using the old partition table.
The new table will be used at the next reboot or after you
run partprobe(8) or kpartx(8)
The operation has completed successfully.
root@:~#
Agora temos um "disco" em arquivo com o esquema de partição GPT com 2 partição para utilizarmos como quisermos.
Agora criado as duas partições vamos formata-las e antes disso precisamos associar a imagem a um dispositivo loop, faremos isso com o comando **losetup**.
root@:~# losetup /dev/loop0 disco.img
root@:~#
Com isso "vinculamos" o arquivo disco.img com o dispositivo /dev/loop0 as duas partição aparecerão como
* /dev/loop0p1
* /dev/loop0p2
Vamos criar o sistema de arquivo na primeira partição
root@:~# mkfs.ext4 /dev/loop0p1
mke2fs 1.42.13 (17-May-2015)
Discarding device blocks: done
Creating filesystem with 92160 1k blocks and 23040 inodes
Filesystem UUID: 92f7e5ce-6edf-4949-8a79-76506e51e9e1
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729
Allocating group tables: done
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
root@:~# mount /dev/lo
log loop0p1 loop1 loop3 loop5 loop7
loop0 loop0p2 loop2 loop4 loop6 loop-control
root@:~#
Agora iremos montar
root@:~# mount /dev/loop0p1 /mnt/
root@:~# ls /mnt/
lost+found
root@:~# df -h
Filesystem Size Used Avail Use% Mounted on
udev 469M 0 469M 0% /dev
tmpfs 98M 4.6M 93M 5% /run
/dev/sda1 15G 2.1G 12G 15% /
tmpfs 488M 0 488M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 488M 0 488M 0% /sys/fs/cgroup
tmpfs 100K 0 100K 0% /run/lxcfs/controllers
tmpfs 98M 0 98M 0% /run/user/1000
/dev/loop0p1 84M 1.6M 76M 2% /mnt
root@:~#
Att.