Ferramentas do usuário

Ferramentas do site


infra-estrutura:linux:criando_particoes_sistema_de_arquivos_arquivos_de_imagem

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.