1

/images/backups は /images のスペースを使用していると思いますか?

/dev/sdb1             820G  645G  135G  83% /images
/dev/loop0            296G  296G     0 100% /images/backups

別のマシン /images に 500G のフリーな同様の種類のパーティションがあり、/images/backups 用に 350G を取り出したいのですが、どうすればよいですか?

指定された量のスペースを与えることができる単純なループマウントですか、それとも必要なサイズの NULL ファイルを作成してマウントする必要がありますか? もしそうなら、サイズを指定するためにどのマウントオプションを使用する必要がありますか?

4

1 に答える 1

3

固定サイズで宛先を作成する必要がありますが、実際にはまだブロックが書き込まれていない「スパースファイル」を使用できます(したがって、書き込むまで実際にはスペースを消費しません)。

例えば:

dd if=/dev/zero of=file.img bs=1 count=0 seek=20G

20GB に事前割り当てされたスパース ファイルを作成します。とはいえ、実際に 20 GB のゼロを事前にディスクに書き込む (ファイルを非スパースにする) と、書き込みが高速になり、断片化が少なくなります。

これは、losetup コマンドを使用してループバック デバイスにアタッチし、ファイル システムを作成してマウントすることができます。

losetup /dev/loop1 file.img
mke2fs -j /dev/loop1
mount /dev/loop1 /mnt/somewhere

既存のファイルがスパースかどうかを知りたい場合は、次のようにします (GNU ツールを使用するシステムでは、以下のいくつかは純粋な POSIX 環境ではサポートされていません)。

{
    read block_count block_size file_size
    if (( block_count * block_size < file_size )) ; then
        echo "Sparse"
    else
        echo "Non-Sparse"
    fi
} < <(stat --format='%b %B %s'$'\n' /images/backups.img)
于 2012-05-11T11:44:17.987 に答える