====== 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.