2012-05-11 20 views
1

/images/backupsが/ images内のスペースを使用していると思いますか?既存のパーティションからループパーティションを作成する方法

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

私は自由500Gで別のマシン/画像内のパーティションの似たようなものをした、と私はそれを行う方法、のために/画像/バックアップ350Gを取り出すことがしたいですか?

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

+1

これは、実際にファイルバッキングは/ dev/loop0がどこにあるかを知るための十分な情報ではありません - それは、 /画像であってもなくてもよい。 "losetup"コマンドでこれが表示されます。 –

+0

losetup/dev/loop0 /dev/loop0:[0811]:45585(/images/backups.img)、そのパーティションに作成されたNULLファイルなのですか? – user379997

+0

「NULL」はありませんが、それは/ imagesにあります。 –

答えて

3

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

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

は20ギガバイトに事前に割り当てられスパースファイルを作成します。つまり、実際に20GBのゼロをディスクの先頭に書き込む(ファイルを非スパースにする)ことは、書き込みが速くなり、断片化が少なくなります。

これは、作成したファイルシステムを持って、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) 
関連する問題