Làm thế nào để thiết lập một thiết bị loopback có thể phát triển?


23

Tôi biết tôi có thể tạo và sử dụng một thiết bị loopback như thế này:

# 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

Tuy nhiên trong trường hợp này hình ảnh đĩa được cố định ở mức 2GB. Đó là 2GB khi trống và 2GB khi đầy. Nó sẽ không phát triển.

Có một loại thiết bị loopback có thể tăng kích thước? Hoặc, có một loại thiết bị loopback chỉ cần nhiều không gian mà nó lưu trữ?


1
Vì tệp này thưa thớt, nên nó chỉ nên sử dụng nhiều dung lượng như được lưu trữ trong ví dụ của bạn.
jordanm

Tùy thuộc vào những gì bạn đang cố gắng thực hiện với điều này, công cụ virt-make-fscó thể hữu ích. Nó có thể được sử dụng để tạo hình ảnh ext2 bằng các tệp tar.
Kotte

Câu trả lời:


17

Tạo một thiết bị tập tin thưa thớt, sử dụng 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 :)'

Tham khảo: bài viết thưa thớt wikipedia


10

@ jordanm bình luận đóng đinh nó. Tôi giả định rằng kích thước tập tin đã được cố định khi tôi nhìn vào đầu ra của ls -lh disk.img. Khi tôi sử dụng ls -s disk.imgnhư trong câu trả lời của @ Stephan, kích thước tệp thực được hiển thị. Để thử nghiệm, tôi đã tạo một tệp hình ảnh lớn hơn ổ cứng của mình:

truncate test.img -s 1000G

Và nó hoạt động tốt, có nghĩa là câu trả lời trong câu hỏi :)


Truncate hoạt động rất tốt, btw, tôi chỉ nghĩ rằng tôi sẽ hiển thị một lệnh thay thế để tạo tệp thưa thớt và (tùy thuộc vào phân phối linux và bộ công cụ của bạn) mà bạn không nhất thiết phải sử dụng losetup, như 'mount' trong hiện tại hóa thân là khá thông minh về việc thiết lập các tùy chọn hợp lý khi bạn cần chúng.
Stephan

Các bit về mount là thú vị. Chỉ là lần này vì tôi cũng cần LUKS (cryptsetup luksFormat / dev / loop0), tôi cần losetup: D
phunehehe

Một lệnh linux tiện dụng khác để tạo tệp thưa là fallocate(1).
Lloeki

2

Bạn có thể thực hiện thủ công với dd tìm kiếm hoặc dễ dàng hơn vì bạn sử dụng cắt ngắn:

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

Một lớp lót để phát triển nó, hầu như không cần tự động hóa ở đây, tôi dám nói :)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.