porque o tamanho da imagem do disco diminuiu após mkfs.ext2

2

primeiro, eu crio uma imagem de disco usando dd :

> dd if=/dev/zero of=disk bs=512 count=2097152
> du -h disk
     1.1G   disk

segundo, fdisk disk cria uma partion:

Command (m for help): p
Disk disk: 1 GiB, 1073741824 bytes, 2097152 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x40c73f2f

Device Boot Start       End  Blocks  Id System
disk1        2048   2097151 1047552  83 Linux

bloqueia a coluna: 1047552, então os setores são: 1024 (o fdisk pode definir o tamanho do setor?).

terceiro, losetup :

 losetup /dev/loop0 -o 2097152 --sizelimit=1072693248 disk

2048 * 1024 = 2097152 1047552 * 1024 = 1072693248.

neste momento, o tamanho do disco é 1G:

> du -h disk
  1.1G  disk

adiante, mkfs.ext2 :

> mkfs.ext2 /dev/loop0
    mke2fs 1.42.8 (20-Jun-2013)
    Discarding device blocks: done                            
    Filesystem label=
    OS type: Linux
    Block size=4096 (log=2)
    Fragment size=4096 (log=2)
    Stride=0 blocks, Stripe width=0 blocks
    65408 inodes, 261632 blocks
    13081 blocks (5.00%) reserved for the super user
    First data block=0
    Maximum filesystem blocks=268435456
    8 block groups
    32768 blocks per group, 32768 fragments per group
    8176 inodes per group
    Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376

    Allocating group tables: done                            
    Writing inode tables: done                            
    Writing superblocks and filesystem accounting information: done

e o tamanho da imagem do disco é reduzido:

> du -h disk
    19M disk

Você sabe que o tamanho do bloco do sistema de arquivos é 4096 e tem 8 grupos de blocos, 32768 blocos por grupo.

4096 * 8 * 32768 = 1G.

    
por jianxi sun 09.12.2013 / 09:25

1 resposta

2

Isso ocorre porque a opção discard em mke2fs está ativada por padrão. Nos kernels mais recentes, fazer um BLKDISCARD em um dispositivo de loop faz com que um buraco seja perfurado no arquivo subjacente, de modo que esse arquivo se torne escasso.

Em uma unidade ATA, o BLKDISCARD seria convertido em TRIM , a idéia é que mke2fs informa à camada abaixo que os dados não são alocados para que possa fazer otimizações com base nessas informações (desaloque o espaço de o arquivo para loop devices, reciclar células flash para SSDs ...).

Se você quiser desabilitar isso, faça:

mkfs.ext2 -E nodiscard /dev/loop0p1
    
por 09.12.2013 / 10:26

Tags