1KiBブロックサイズの100MiBパーティションに対応する空きブロック/スペースがないのはなぜですか?

1KiBブロックサイズの100MiBパーティションに対応する空きブロック/スペースがないのはなぜですか?

私は非常に高密度のコンテナ仮想化環境を持っているので、各コンテナを非常に小さくすることを試みています。 「非常に小さい」は87MBを意味します。Ubuntu14.04(Trusty Tahr)はパッケージマネージャの互換性を損なうことはありません。

だから私は使う左心室容積私のコンテナのバックアップストアとして、最近非常に奇妙な数字を見ました。ここに彼らが来る。

100MiB(例、2の累乗)論理ボリュームを作成してみましょう。

sudo lvcreate -L100M -n test1 /dev/purgatory

寸法を確認したいので発行します。sudo lvs --units k

test1             purgatory  -wi-a----  102400.00k

マブソサ、文字通り100MiBです。

外部4ファイルシステムもちろん、-m 0空間の無駄を防ぐパラメータを覚えています。

sudo mkfs.ext4 -m 0 /dev/purgatory/test1

mke2fs 1.42.9 (4-Feb-2014)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
25688 inodes, 102400 blocks
0 blocks (0.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=67371008
13 block groups
8192 blocks per group, 8192 fragments per group
1976 inodes per group
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

甘くてきれいです。ブロックサイズに注意してください。論理ボリュームが小さいため、mkfs.ext4は通常の4KiBの代わりに1KiBサイズのブロックを作成することにしました。

今インストールします。

sudo mount /dev/purgatory/test1 /mnt/test1

引数なしで呼び出してみましょうdf(1KiBチャンクを見たい)。

/dev/mapper/purgatory-test1     95054    1550     91456   2% /mnt/test1

待って、よ〜

合計95054ブロックがあります。ただし、デバイス自体には102,400個の1KiBブロックがあります。ストレージスペースは92.8%しかありません。私たちの近所はどこですか?

実際のブロックデバイスを見てみましょう。 Aには16777216個の1Kブロックを持つ16GiB仮想ディスクがありますが、df出力には15396784個のブロックしかありません。 91.7%、これは何ですか?

これで、調査状況が次のように報告されます。(スポイラー:結果なし)

  1. ファイルシステムはデバイスの先頭から起動できません。奇妙ですが可能です。幸い、ext4にはマジックバイトがあるので、その存在を確認してみましょう。

    sudo hexdump -C /dev/purgatory/test1 | sudo hexdump -C /dev/purgatory/test1 | grep "53 ef"

これはスーパーブロックを示しています:

00000430  a9 10 e7 54 01 00 ff ff  53 ef 01 00 01 00 00 00  |...T....S.......|

16進数430 = 1072年12月なので、最初のキロバイト以降のどこかにあります。合理的に見えます。 ext4は、VBRなどの奇妙な現象を処理するために最初の1024バイトをスキップします。

  1. これは日記です!

まったくそうではありません。ログはdf出力に使用できるスペースを占めます。

  1. ああ、dump2fsがあり、そこからサイズを確認できます!

...たくさんのgrep...

sudo dumpe2fs /dev/purgatory/test1 | grep "Free blocks"

あや。

Free blocks:              93504
  Free blocks: 3510-8192
  Free blocks: 8451-16384
  Free blocks: 16385-24576
  Free blocks: 24835-32768
  Free blocks: 32769-40960
  Free blocks: 41219-49152
  Free blocks: 53249-57344
  Free blocks: 57603-65536
  Free blocks: 65537-73728
  Free blocks: 73987-81920
  Free blocks: 81921-90112
  Free blocks: 90113-98304
  Free blocks: 98305-102399

別の番号があります。 93504個の無料ブロック。

質問は:何が起こっているのでしょうか?

  • ブロックデバイス:102400k(lvsが言う)
  • ファイルシステムサイズ:95054k(dfが言う)
  • フリーブロック:93504k(dumpe2fsによる)
  • 利用可能なサイズ:91456k(dfによる)

ベストアンサー1

この試み:mkfs.ext4 -N 104 -m0 -O ^has_journal,^resize_inode /dev/purgatory/test1

私はそれが本当に「何が起こっているのか」というアイデアを提供すると思います。

-N 104(ファイルシステムに必要なiNodeの数を設定します。)

  • iNodeごとの「費用」書くことができるスペース(128バイト)

-m 0(予約済みブロックなし)
-O ^has_journal,^resize_inode(機能の無効化has_journalresize_inode

  • resize_inode「コスト」無料スペース ( df-12K に表示される 1550 個の 1K-ブロック/2% の大部分は "lost+found" フォルダー用のもの)
  • has_journal「コスト」書くことができるスペース(あなたの場合は4096 1Kブロック)

102348使用できない別の 52 個のブロックが残ります ( 102400「lost+found」フォルダを削除する場合)。それでは、次の内容を詳しく見てみましょうdumpe2fs

Group 0: (Blocks 1-8192) [ITABLE_ZEROED]
  Checksum 0x5ee2, unused inodes 65533
  Primary superblock at 1, Group descriptors at 2-2
  Block bitmap at 3 (+2), Inode bitmap at 19 (+18)
  Inode table at 35-35 (+34)
  8150 free blocks, 0 free inodes, 1 directories, 65533 unused inodes
  Free blocks: 17-18, 32-34, 48-8192
  Free inodes: 
Group 1: (Blocks 8193-16384) [BLOCK_UNINIT, ITABLE_ZEROED]
  Checksum 0x56cf, unused inodes 5
  Backup superblock at 8193, Group descriptors at 8194-8194
  Block bitmap at 4 (+4294959107), Inode bitmap at 20 (+4294959123)
  Inode table at 36-36 (+4294959139)
  8190 free blocks, 6 free inodes, 0 directories, 5 unused inodes
  Free blocks: 8193-16384
  Free inodes: 11-16
Group 2: (Blocks 16385-24576) [INODE_UNINIT, BLOCK_UNINIT, ITABLE_ZEROED]
  Checksum 0x51eb, unused inodes 8
  Block bitmap at 5 (+4294950916), Inode bitmap at 21 (+4294950932)
  Inode table at 37-37 (+4294950948)
  8192 free blocks, 8 free inodes, 0 directories, 8 unused inodes
  Free blocks: 16385-24576
  Free inodes: 17-24
Group 3: (Blocks 24577-32768) [INODE_UNINIT, BLOCK_UNINIT, ITABLE_ZEROED]
  Checksum 0x3de1, unused inodes 8
  Backup superblock at 24577, Group descriptors at 24578-24578
  Block bitmap at 6 (+4294942725), Inode bitmap at 22 (+4294942741)
  Inode table at 38-38 (+4294942757)
  8190 free blocks, 8 free inodes, 0 directories, 8 unused inodes
  Free blocks: 24577-32768
  Free inodes: 25-32
Group 4: (Blocks 32769-40960) [INODE_UNINIT, BLOCK_UNINIT, ITABLE_ZEROED]
  Checksum 0x79b9, unused inodes 8
  Block bitmap at 7 (+4294934534), Inode bitmap at 23 (+4294934550)
  Inode table at 39-39 (+4294934566)
  8192 free blocks, 8 free inodes, 0 directories, 8 unused inodes
  Free blocks: 32769-40960
  Free inodes: 33-40
Group 5: (Blocks 40961-49152) [INODE_UNINIT, BLOCK_UNINIT, ITABLE_ZEROED]
  Checksum 0x0059, unused inodes 8
  Backup superblock at 40961, Group descriptors at 40962-40962
  Block bitmap at 8 (+4294926343), Inode bitmap at 24 (+4294926359)
  Inode table at 40-40 (+4294926375)
  8190 free blocks, 8 free inodes, 0 directories, 8 unused inodes
  Free blocks: 40961-49152
  Free inodes: 41-48
Group 6: (Blocks 49153-57344) [INODE_UNINIT, BLOCK_UNINIT, ITABLE_ZEROED]
  Checksum 0x3000, unused inodes 8
  Block bitmap at 9 (+4294918152), Inode bitmap at 25 (+4294918168)
  Inode table at 41-41 (+4294918184)
  8192 free blocks, 8 free inodes, 0 directories, 8 unused inodes
  Free blocks: 49153-57344
  Free inodes: 49-56
Group 7: (Blocks 57345-65536) [INODE_UNINIT, BLOCK_UNINIT, ITABLE_ZEROED]
  Checksum 0x5c0a, unused inodes 8
  Backup superblock at 57345, Group descriptors at 57346-57346
  Block bitmap at 10 (+4294909961), Inode bitmap at 26 (+4294909977)
  Inode table at 42-42 (+4294909993)
  8190 free blocks, 8 free inodes, 0 directories, 8 unused inodes
  Free blocks: 57345-65536
  Free inodes: 57-64
Group 8: (Blocks 65537-73728) [INODE_UNINIT, BLOCK_UNINIT, ITABLE_ZEROED]
  Checksum 0xf050, unused inodes 8
  Block bitmap at 11 (+4294901770), Inode bitmap at 27 (+4294901786)
  Inode table at 43-43 (+4294901802)
  8192 free blocks, 8 free inodes, 0 directories, 8 unused inodes
  Free blocks: 65537-73728
  Free inodes: 65-72
Group 9: (Blocks 73729-81920) [INODE_UNINIT, BLOCK_UNINIT, ITABLE_ZEROED]
  Checksum 0x50fd, unused inodes 8
  Backup superblock at 73729, Group descriptors at 73730-73730
  Block bitmap at 12 (+4294893579), Inode bitmap at 28 (+4294893595)
  Inode table at 44-44 (+4294893611)
  8190 free blocks, 8 free inodes, 0 directories, 8 unused inodes
  Free blocks: 73729-81920
  Free inodes: 73-80
Group 10: (Blocks 81921-90112) [INODE_UNINIT, BLOCK_UNINIT, ITABLE_ZEROED]
  Checksum 0x60a4, unused inodes 8
  Block bitmap at 13 (+4294885388), Inode bitmap at 29 (+4294885404)
  Inode table at 45-45 (+4294885420)
  8192 free blocks, 8 free inodes, 0 directories, 8 unused inodes
  Free blocks: 81921-90112
  Free inodes: 81-88
Group 11: (Blocks 90113-98304) [INODE_UNINIT, BLOCK_UNINIT, ITABLE_ZEROED]
  Checksum 0x28de, unused inodes 8
  Block bitmap at 14 (+4294877197), Inode bitmap at 30 (+4294877213)
  Inode table at 46-46 (+4294877229)
  8192 free blocks, 8 free inodes, 0 directories, 8 unused inodes
  Free blocks: 90113-98304
  Free inodes: 89-96
Group 12: (Blocks 98305-102399) [INODE_UNINIT, ITABLE_ZEROED]
  Checksum 0x9223, unused inodes 8
  Block bitmap at 15 (+4294869006), Inode bitmap at 31 (+4294869022)
  Inode table at 47-47 (+4294869038)
  4095 free blocks, 8 free inodes, 0 directories, 8 unused inodes
  Free blocks: 98305-102399
  Free inodes: 97-104

使用されたブロック(バックアップスーパーブロック、グループ記述子、ブロックビットマップ、inodeビットマップ、およびinodeテーブルの場合)を計算するか、以下をgrep実行して計算します。

LANG=C dumpe2fs /dev/mapper/vg_vms-test1 | grep ' at ' | grep -v ',' | wc -l

これはブロックがある行数(私たちの場合)を提供し、

LANG=C dumpe2fs /dev/mapper/vg_vms-test1 | grep ' at ' | grep ',' | wc -l

これは2つのブロックを持つ行数を提供します(この場合)。

13したがって、(この例では)それぞれ1つのブロックを含む行と、それぞれ2つのブロックを含む行があります19

13+19*2

51ext4自体が使用するブロックを提供します。ついに一枚だけ残りました。ブロック0は、1024ブートセクタなどの先頭からスキップされたバイトです。

おすすめ記事