私は AOakley の素晴らしいガイドを使用して Linux SD カード パーティションを縮小しています。自動化しようとしていますが、パーティションで使用されているバイト数を判断するためのコマンド ライン ツールがないようです。
たとえば、gparted では、使用済み領域は 6.99 GB のうち 1.88 GB であると表示されます (注意: /dev/sdb の 2 番目のパーティションにマウントされている /dev/loop0 を使用しています)。
df
間違っている:
% df /dev/loop0
Filesystem ... Use%
udev ... 0%
...そしてfdisk
、parted
使用されたスペースは印刷されません。
パーティション内の使用済み領域を判別するには、コマンドラインから何を使用すればよいですかgparted
?
回答: 要約すると、次のようになります。パーティションは で、 、(合計)をext4
使用dumpe2fs
および抽出できます。を組み合わせると と完全に一致します。 は、縮小中に断片化を処理することがわかります。詳細については、のマニュアル ページを参照してください (ただし、マニュアル ページのエディターは GiB と GB について少し苦々しい態度をとっています)。:)free blocks
block count
block size
gparted
resize2fs
ext4
答え1
df
はほぼ正しいツールですが、デバイス ノードではなく、調べたいファイル システムに属するマウント ポイント (または以下の任意のファイル) を照会する必要があります。使用したノードは、仮想ファイル システム/dev/loop0
に属する特別なファイルですudev
。そのため、 が取得されますudev
。
(/dev/loop0
または/dev/sdb2
、 )をどこかにマウントし/dev/loop0
(mount でもかまいませんro
)、 を呼び出しますdf /the/mountpoint
。すると、df
ファイルシステムが自身について報告する内容が表示されます。
私はdf
「ほとんどファイルシステム (および後でパーティション) をツールによって報告されるサイズまで縮小できる保証はないため、「適切なツール」を使用する必要はありませんdf
。印刷される内容が最初の (または 0 番目の) 推定値になります。
異なるファイルシステムのサイズを変更するには、異なるツールが必要です。理想的な世界では、そのようなツール (または付随するツール) は、最小可能なサイズ、または少なくともサイズ変更が確実に成功する最小サイズを教えてくれます。実際には、次のような状況に遭遇することがあります。
既知のバグ
によって推定されるファイルシステムの最小サイズはresize2fs
、特に 1k および 2k のブロックサイズのファイルシステムの場合、正しくない可能性があります。
(ソース)
gparted
はファイルシステム固有のツールを使用します。 で実行しましたstrace
が、 を使用している証拠は見つかりませんでしたdf
。btrfs filesystem show …
、、dumpe2fs …
…を確認しました。
まとめ:
- 使い方が
df
間違っています。 - いずれにせよ、ファイルシステム固有のツールを使用する方がよいでしょう。
gparted
問題のファイルシステムを指定していないため、どのツールを使用すべきかをお伝えすることはできません。