O tamanho do bloco do sistema de arquivos difere entre diferentes partições ext4

5

temos uma placa customizada baseada em BBB com 256MB de RAM e eMMC de 4GB,

Eu o particionei usando o código abaixo,

parted --script -a optimal /dev/mmcblk0 \
  mklabel gpt \
  mkpart primary 128KiB 255KiB \
  mkpart primary 256KiB 383KiB \
  mkpart primary 384KiB 511KiB \
  mkpart primary 1MiB 2MiB \
  mkpart primary 2MiB 3MiB \ 
  mkpart primary 3MiB 4MiB \
  mkpart primary 4MiB 5MiB \ 
  mkpart primary 5MiB 10MiB \
  mkpart primary 10MiB 15MiB \
  mkpart primary 15MiB 20MiB \
  mkpart primary 20MiB 21MiB \
  mkpart primary 21MiB 22MiB \
  mkpart primary 22MiB 23MiB \
  mkpart primary 23MiB 28MiB \
  mkpart primary ext4 28MiB 528MiB \
  mkpart primary ext4 528MiB 1028MiB \
  mkpart primary ext4 1028MiB 1128MiB \
  mkpart primary ext4 1128MiB 1188MiB \
  mkpart primary ext4 1188MiB 2212MiB \
  mkpart primary ext4 2212MiB 2603MiB \
  mkpart primary ext4 2603MiB 2639MiB \
  mkpart primary ext4 2639MiB 100% \

E depois partições do sistema de arquivos formatadas usando o comando abaixo

mkfs.ext4 -j -L $LABEL $PARTITION

Agora, quando leio o tamanho do bloco do sistema de arquivos usando o tune2fs, vejo um valor diferente para partições menores que 1GiB e partição maior ou igual à partição de 1GiB.

# tune2fs -l /dev/mmcblk0p15  | grep Block
Block count:              512000
Block size:               1024
Blocks per group:         8192
# 
# 
# tune2fs -l /dev/mmcblk0p16  | grep Block
Block count:              512000
Block size:               1024
Blocks per group:         8192
# 
# 
# tune2fs -l /dev/mmcblk0p19  | grep Block
Block count:              262144
Block size:               4096
Blocks per group:         32768
# tune2fs -l /dev/mmcblk0p22  | grep Block
Block count:              1191936
Block size:               4096
Blocks per group:         32768

Não consigo entender por que os tamanhos dos blocos são diferentes. Além disso, o mke2fs.conf tem todos os valores padrão e o tamanho do bloco mencionado é 4096.

[defaults]
    base_features = sparse_super,filetype,resize_inode,dir_index,ext_attr
    default_mntopts = acl,user_xattr
    enable_periodic_fsck = 0
    blocksize = 4096
    inode_size = 256
    inode_ratio = 16384

[fs_types]
    ext3 = {
        features = has_journal
    }
    ext4 = {
        features = has_journal,extent,huge_file,flex_bg,uninit_bg,dir_nlink,extra_isize
        auto_64-bit_support = 1
        inode_size = 256
    }
    ext4dev = {
        features = has_journal,extent,huge_file,flex_bg,uninit_bg,dir_nlink,extra_isize
        inode_size = 256
        options = test_fs=1
    }
    small = {
        blocksize = 1024
        inode_size = 128
        inode_ratio = 4096
    }
    floppy = {
        blocksize = 1024
        inode_size = 128
        inode_ratio = 8192
    }
    big = {
        inode_ratio = 32768
    }
    huge = {
        inode_ratio = 65536
    }
    news = {
        inode_ratio = 4096
    }
    largefile = {
        inode_ratio = 1048576
        blocksize = -1
    }
    largefile4 = {
        inode_ratio = 4194304
        blocksize = -1
    }
    hurd = {
         blocksize = 4096
         inode_size = 128
    }

Alguém pode explicar / sugerir um doc / hint porque os tamanhos dos blocos são diferentes para diferentes partições?

    
por AnkurTank 10.10.2017 / 18:05

1 resposta

5

Como @derobert mencionado no comentário.

mkfs.ext4 / mke2fs refere-se a /etc/mke2fs.conf e formata a partição.

mke2fs escolhe o tamanho do bloco com base no tamanho da partição, se não for mencionado explicitamente. Leia -b block-size e -T usage-type na página de manual do mke2fs para o mesmo.

Portanto, quando o tamanho da partição for menor que 512 MB%, omkfs.ext4 o formata como small com as seguintes configurações do arquivo mke2fs.conf .

 small = {
        blocksize = 1024
        inode_size = 128
        inode_ratio = 4096
    }

No entanto, quando o tamanho da partição é superior a 512 MB mkfs.ext4 ou mke2fs formata a partição usando defaults do arquivo mke2fs.conf

[defaults]
    base_features = sparse_super,filetype,resize_inode,dir_index,ext_attr
    default_mntopts = acl,user_xattr
    enable_periodic_fsck = 0
    blocksize = 4096
    inode_size = 256
    inode_ratio = 16384

Isso é o que estava causando diferentes tamanhos de bloco nas diferentes partições para mim.

Mais uma nota. Para obter o número total de inode que você obterá após a formatação, pode ser calculado da seguinte forma,

Total number of inodes = partition size / inode_ration
e.g. 
for 500MB partition
total number of inodes = (500 * 1024 * 1024) / 4096
                       = 128000

OBSERVAÇÃO: acho que estou perdendo alguma coisa aqui, porque, para os cálculos que mostrei acima, o valor real mostrado por tune2fs é Inode count: 128016 , o que é quase igual, mas não exato.

    
por 11.10.2017 / 17:32