fallocateとmkfs.ext4を使用すると、使用可能なディスク容量を超える可能性があります。

fallocateとmkfs.ext4を使用すると、使用可能なディスク容量を超える可能性があります。

背景:コンピュータクラスタが存在し、ノードが割り当てられると、ジョブは要求されたサイズのtmpディレクトリを取得します。しかし、要求された合計ディスク容量が利用可能なスペースよりも大きい場合、同じシステムに2つのタスクを送信できることがわかりました。エラーをfallocateおよびで追跡しましたmkfs.ext4

1.1Tの空きディスク容量があるテストノード/マシンでtmpディレクトリをマウントするための仮想ディスクを作成しました。使用fallocatemkfs.ext4:

# fallocate -l 900G /tmp/disk-test1
# /sbin/mkfs.ext4 -F /tmp/disk-test1
# fallocate -l 900G /tmp/disk-test2
# /sbin/mkfs.ext4 -F /tmp/disk-test2

サイズ900Gの2つのファイルを作成します。

# ll --block-size=G /tmp/
...
-rw-r--r--. 1 root  root 900G Jul  4 14:03 disk-test1
-rw-r--r--. 1 root  root 900G Jul  4 14:03 disk-test2
...

そして利用可能なディスク容量を確認してください

# df -h
Filesystem                 Size  Used Avail Use% Mounted on
/dev/mapper/vg.01-lv_root  1.1T  8.6G  1.1T   1% /
...

/tmpディレクトリ:

# df -h /tmp
Filesystem                 Size  Used Avail Use% Mounted on
/dev/mapper/vg.01-lv_root  1.1T  8.6G  1.1T   1% /

私はこのようなことが起こりたくありません。空き容量が不足している場合は仮想ディスクを作成しないでください。マウントすると、仮想ディスクへの書き込みはそのサイズに応じて制限する必要があります。

ここで何が起こっているのでしょうか?

ベストアンサー1

はい、再現できます:

# df -h .
Filesystem           Size  Used Avail Use% Mounted on
/dev/root             30G   14G   14G  51% /
# fallocate -l 8G test1.disk
# df -h .
Filesystem           Size  Used Avail Use% Mounted on
/dev/root             30G   22G  5.8G  80% /
# mkfs -text4 test1.disk
mke2fs 1.43.4 (31-Jan-2017)
Discarding device blocks: done                            
Creating filesystem with 2097152 4k blocks and 524288 inodes
...
# df -h .
Filesystem           Size  Used Avail Use% Mounted on
/dev/root             30G   14G   14G  51% /

ファイルがdの場合、ディスク使用量は増加しますfallocateが、d以降は再び減少しますmkfs。参考にしてください「デバイスブロックの廃棄:完了」出力からmke2fs。 (Frost Schutzがコメントでこれを言及しました。.)

これマンページには次の内容があります。-E discard:

mkfsが実行されているときにチャンクを削除してみてください
(最初にチャンクを削除することは、ソリッドステートデバイスやスパース/シンプロビジョニングされたストレージに役立ちます)。 ...デフォルト設定です。

逆の場合もnodiscard試してみます。

# df -h .; fallocate -l 8G test2.disk; mkfs -text4 -Enodiscard test2.disk; df -h .
Filesystem           Size  Used Avail Use% Mounted on
/dev/root             30G   14G   14G  51% /
mke2fs 1.43.4 (31-Jan-2017)
Creating filesystem with 2097152 4k blocks and 524288 inodes
...
Filesystem           Size  Used Avail Use% Mounted on
/dev/root             30G   22G  5.9G  79% /

もう一つはfallocate -l 8G失敗しました。

おすすめ記事