web-dev-qa-db-ja.com

拡張可能なループバックデバイスをセットアップする方法

次のようなループバックデバイスを作成して使用できることはわかっています。

# Create the file
truncate disk.img --size 2G
# Create a filesystem
mkfs.ext4 disk.img
# Mount to use
mount disk.img /mnt
# Clean up
umount /mnt

ただし、この場合、ディスクイメージは2GBに固定されています。空の場合は2GB、満杯の場合は2GBです。成長しません。

サイズが大きくなる可能性がある一種のループバックデバイスはありますか?または、格納するスペースだけを必要とする一種のループバックデバイスはありますか?

24
phunehehe

@ jordanmのコメント はそれを釘付けにしました。 ls -lh disk.imgの出力を見ると、ファイルサイズが固定されていると思いました。 @ Stephan's answer のようにls -s disk.imgを使用すると、実際のファイルサイズが表示されます。テストとして、ハードドライブよりも大きいイメージファイルを作成しました。

truncate test.img -s 1000G

そしてそれはうまく機能します、それは答えが質問にあることを意味します:)

10
phunehehe

Ddを使用して、スパースファイルデバイスを作成します。

df -hm # to show where we started
dd of=sparse-file bs=1k seek=102400 count=0 # creates a 100Meg sparsefile
mkfs.ext4 sparse-file
mkdir blah
mount sparse-file blah
cp somefile blah
ls -lahts sparse-file  # The 's' option will report the actual space taken in the first column
ls -lahts blah
df -hm # doublecheck my work
echo 'profit :)'

参照: wikipedia sparse file article

17
Stephan

切り捨てを使用するため、dd seekまたはそれより簡単に手動で行うことができます。

truncate -s 100M file
mkfs.ext4 -m0 file
#mount, do whatever
umount /mountpoint
#let's grow it to 200 MB
truncate -s 200M file
e2fsck -f file && resize2fs file
#done

それを成長させるための2つのライナーは、ここで自動化をほとんど要求しません、私は敢えて言うでしょう:)

2
Malina Salina