파일 시스템 블록 크기는 ext4 파티션마다 다릅니다.

파일 시스템 블록 크기는 ext4 파티션마다 다릅니다.

우리는 256MB RAM과 4GB eMMC를 갖춘 BBB 기반 맞춤형 보드를 가지고 있습니다.

다음 코드를 사용하여 분할했습니다.

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% \

그런 다음 다음 명령을 사용하여 파일 시스템 파티션을 포맷합니다.

mkfs.ext4 -j -L $LABEL $PARTITION

이제 une2fs를 사용하여 파일 시스템 블록 크기를 읽으면 1GiB보다 작은 파티션과 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

블록 크기가 왜 다른지 이해할 수 없습니다. 또한 mke2fs.conf에는 모든 기본값이 있으며 언급된 블록 크기는 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
    }

누군가 서로 다른 파티션의 블록 크기가 다른 이유를 설명/문서화/힌트할 수 있습니까?

답변1

@derobert가 의견에서 언급했듯이.

mkfs.ext4/mke2fs는 /etc/mke2fs.conf파티션을 참조하고 포맷합니다.

mke2fs명시적으로 언급되지 않은 경우 블록 크기는 파티션 크기에 따라 선택됩니다. 읽기 -b block-size및 mke2fs에서-T usage-type매뉴얼 페이지같은 것.

따라서 파티션 크기가 512MB 미만인 경우 mkfs.ext4파일에서 다음 설정으로 포맷하시기 바랍니다.smallmke2fs.conf

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

그러나 파티션 크기가 512MB를 초과하거나 파티션이 mkfs.ext4파일에서 포맷된 경우mke2fsdefaultsmke2fs.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

이것이 다른 파티션에서 다른 블록 크기를 갖게 만드는 원인입니다.

메모 하나 더. 포맷 후 얻은 총 inode 수를 얻으려면 다음과 같이 계산할 수 있습니다.

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

노트:tune2fs위에 표시된 계산에 대해 표시된 실제 값은 거의 Inode count: 128016일치하지만 정확하지 않기 때문에 여기서 뭔가 빠졌다고 생각합니다.

관련 정보