Đúng! Có vẻ như nó có thể. Hãy kiểm tra làm thế nào nó có thể đạt được. Lưu ý rằng điều này không tạo ra một hệ thống tệp theo yêu cầu tăng trưởng thực sự, vì khi hệ thống tệp đạt kích thước tối đa của tệp thưa thớt, nó sẽ báo cáo lỗi 'hết dung lượng' nếu vẫn cần ghi thêm dữ liệu.
Ban đầu, tôi đang nghiên cứu Thin Granting , một công nghệ nổi tiếng để tiết kiệm không gian lưu trữ trong các tình huống ảo hóa. Thật không may, trong các trường hợp sử dụng Linux phổ biến, nó dường như chỉ khả dụng với LVM . Vì điều này có vẻ hơi ngoài phạm vi câu hỏi của bạn, tôi đã tìm kiếm thứ khác.
Khái niệm thứ hai tôi đã điều tra là Spzzy File . Điều này hoàn toàn phù hợp với câu hỏi của bạn và ... nghi ngờ ban đầu của tôi là: " OK. Tôi có thể tạo một tệp thưa. Nhưng điều gì xảy ra khi tôi khởi tạo nó dưới dạng thùng chứa LUKS? Việc khởi tạo như vậy có phân bổ tất cả không gian có sẵn không? Nếu không, Điều gì sẽ xảy ra khi tôi sẽ khởi tạo hệ thống tập tin trong một thùng chứa như vậy? Sẽ mkfs.ext4
phân bổ tất cả không gian có sẵn? ". Vì không có câu trả lời, tôi quyết định thử. Vì vậy, hãy xem những gì đã xảy ra.
Hãy bắt đầu từ hệ thống hiện tại của tôi, nơi tôi chỉ có 3,3G dung lượng trống trong /repository
hệ thống tệp:
root@iMac-Chiara:~# df -h /repository
File system Dim. Usati Dispon. Uso% Montato su
/dev/sda3 275G 258G 3,3G 99% /repository
Hãy tạo một tệp thưa thớt 10G trong một hệ thống tệp như vậy, với:
root@iMac-Chiara:~# dd of=/repository/file_container.img bs=1G count=0 seek=10
0+0 record dentro
0+0 record fuori
0 byte (0 B) copiati, 0,000119606 s, 0,0 kB/s
và hãy xác minh rằng ... nó thực sự là một tệp thưa thớt:
root@iMac-Chiara:~# ls -lh /repository/file_container.img
-rw-r--r-- 1 root root 10G dic 12 19:48 /repository/file_container.img
ĐỒNG Ý. Vì vậy, chúng tôi có một tệp 10G , trong một hệ thống tệp trước đây có 3,3G không gian trống. Tôi còn bao nhiêu không gian trống?
root@iMac-Chiara:~# df -h /repository
File system Dim. Usati Dispon. Uso% Montato su
/dev/sda3 275G 258G 3,3G 99% /repository
Vẫn 3,3G. Đẹp. Tệp thưa thớt thực sự là ... tệp thưa thớt ;-) Hãy tiến lên phía trước, bằng cách tạo một thùng chứa LUKS trong tệp 10G như vậy và ... hãy xem liệu chúng ta có hết dung lượng không:
root@iMac-Chiara:~# losetup /dev/loop0 /repository/file_container.img
root@iMac-Chiara:~# cryptsetup -y luksFormat /dev/loop0
WARNING!
========
Ciò sovrascriverà i dati in /dev/loop0 in modo irreversibile.
Are you sure? (Type uppercase yes): YES
Inserire la passphrase LUKS:
Verify passphrase:
root@iMac-Chiara:~# cryptsetup luksOpen /dev/loop0 secretfs
Inserire la passphrase per /dev/loop0:
root@iMac-Chiara:~#
Vì vậy, bây giờ tôi có một secrets
thùng chứa đã mở được xác định trên đầu tệp thưa thớt 10G của tôi được lưu trữ trong một hệ thống tệp chỉ có 3,3G không gian trống.
Tôi còn bao nhiêu không gian trống?
root@iMac-Chiara:~# df -h /repository
File system Dim. Usati Dispon. Uso% Montato su
/dev/sda3 275G 258G 3,3G 99% /repository
Tuyệt vời! Vẫn 3,3GB. Container mã hóa của chúng tôi yêu cầu chủ yếu là không có không gian!
Hãy kiểm tra xem mọi thứ có ổn không hoặc nếu có gì lạ với thiết lập của chúng tôi:
root@iMac-Chiara:~# cryptsetup status secretfs
/dev/mapper/secretfs is active.
type: LUKS1
cipher: aes-cbc-essiv:sha256
keysize: 256 bits
device: /dev/loop0
loop: /repository/file_container.img
offset: 4096 sectors
size: 20967424 sectors
mode: read/write
Mọi thứ có vẻ ổn, vì vậy hãy bắt đầu sử dụng một thùng chứa như vậy để lưu trữ một cái gì đó. Hãy bắt đầu bằng cách tạo một hệ thống tệp EXT4 bên trong nó:
root@iMac-Chiara:~# mkfs.ext4 /dev/mapper/secretfs
mke2fs 1.42.5 (29-Jul-2012)
Etichetta del filesystem=
OS type: Linux
Dimensione blocco=4096 (log=2)
Dimensione frammento=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
655360 inodes, 2620928 blocks
131046 blocks (5.00%) reserved for the super user
Primo blocco dati=0
Maximum filesystem blocks=2684354560
80 gruppi di blocchi
32768 blocchi per gruppo, 32768 frammenti per gruppo
8192 inode per gruppo
Backup del superblocco salvati nei blocchi:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
Allocating group tables: fatto
Scrittura delle tavole degli inode: fatto
Creating journal (32768 blocks): fatto
Scrittura delle informazioni dei superblocchi e dell'accounting del filesystem: fatto
root@iMac-Chiara:~#
Có vẻ như nó hoạt động, vì không có dấu vết của "ngoài không gian". Hãy kiểm tra:
root@iMac-Chiara:~# df -h /repository
File system Dim. Usati Dispon. Uso% Montato su
/dev/sda3 275G 258G 3,2G 99% /repository
Uhm .... vậy là có chuyện xảy ra. Chúng tôi đã mất khoảng 100 triệu dung lượng nhưng .... đó là một hành vi được mong đợi: việc tạo ra hệ thống tập tin EXT4 DO yêu cầu viết rất nhiều siêu dữ liệu. Vì vậy, thật bình thường khi một số không gian đã được sử dụng bởi quá trình tạo.
Đây có phải là một hệ thống tập tin EXT4 "làm việc" không?
root@iMac-Chiara:~# tune2fs -l /dev/mapper/secretfs
tune2fs 1.42.5 (29-Jul-2012)
Filesystem volume name: <none>
Last mounted on: <not available>
Filesystem UUID: e63321c3-cee7-478d-a6af-cbdcaf1be1f7
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags: signed_directory_hash
Default mount options: user_xattr acl
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 655360
Block count: 2620928
Reserved block count: 131046
Free blocks: 2541265
Free inodes: 655349
First block: 0
Block size: 4096
Fragment size: 4096
Reserved GDT blocks: 639
Blocks per group: 32768
Fragments per group: 32768
Inodes per group: 8192
Inode blocks per group: 512
Flex block group size: 16
Filesystem created: Sat Dec 12 19:58:05 2015
Last mount time: n/a
Last write time: Sat Dec 12 19:58:05 2015
Mount count: 0
Maximum mount count: -1
Last checked: Sat Dec 12 19:58:05 2015
Check interval: 0 (<none>)
Lifetime writes: 131 MB
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 256
Required extra isize: 28
Desired extra isize: 28
Journal inode: 8
Default directory hash: half_md4
Directory Hash Seed: c8b3bf1b-9f05-4267-85d3-2ecfdbaa6dc3
Journal backup: inode blocks
Đúng! Có vẻ ổn
Vì vậy, bây giờ chúng ta có một hệ thống tệp EXT4 được viết bên trong một thùng chứa LUKS đã mở được xác định ở trên cùng của tệp thưa thớt 10G được lưu trữ trong hệ thống tệp 3.3G.
Hãy xem liệu mọi thứ hoạt động chính xác, bằng cách phân bổ không gian "theo yêu cầu".
Hãy bắt đầu bằng cách ghi 500 triệu dữ liệu giả vào FS được mã hóa
root@iMac-Chiara:~# mkdir /mnt/temp
root@iMac-Chiara:~# mount /dev/mapper/secretfs /mnt/temp
root@iMac-Chiara:~# dd if=/dev/zero of=/mnt/temp/random_data.bin bs=1M count=512
512+0 record dentro
512+0 record fuori
536870912 byte (537 MB) copiati, 2,35214 s, 228 MB/s
root@iMac-Chiara:~#
Chúng tôi đã thành công trong việc tạo tập tin?
root@iMac-Chiara:~# ls -lh /mnt/temp/random_data.bin
-rw-r--r-- 1 root root 512M dic 12 20:09 /mnt/temp/random_data.bin
Có vẻ như vậy.
Điều gì đã xảy ra với hệ thống tập tin thực sự của chúng tôi?
root@iMac-Chiara:~# df -h /repository
File system Dim. Usati Dispon. Uso% Montato su
/dev/sda3 275G 259G 2,5G 100% /repository
Ơ! Chúng tôi "mất" hơn 500 triệu. Điều đó thật tốt, BTW, vì không gian vật lý thực sự được phân bổ theo yêu cầu!
Hãy lưu trữ tệp 2GB khác:
root@iMac-Chiara:~# dd if=/dev/zero of=/mnt/temp/another_random_data.bin bs=1G count=2
2+0 record dentro
2+0 record fuori
2147483648 byte (2,1 GB) copiati, 25,6539 s, 83,7 MB/s
root@iMac-Chiara:~#
Chuyện gì đã xảy ra?
root@iMac-Chiara:~# ls -arlh /mnt/temp
totale 2,6G
-rw-r--r-- 1 root root 512M dic 12 20:09 random_data.bin
drwx------ 2 root root 16K dic 12 19:58 lost+found
-rw-r--r-- 1 root root 2,0G dic 12 20:13 another_random_data.bin
drwxr-xr-x 8 root root 4,0K mag 29 2015 ..
drwxr-xr-x 3 root root 4,0K dic 12 20:12 .
root@iMac-Chiara:~# df -h /repository
File system Dim. Usati Dispon. Uso% Montato su
/dev/sda3 275G 261G 484M 100% /repository
root@iMac-Chiara:~#
Thực sự tốt đẹp. Điều gì xảy ra nếu chúng ta xóa một tập tin?
root@iMac-Chiara:~# rm /mnt/temp/random_data.bin
root@iMac-Chiara:~# sync
root@iMac-Chiara:~# ls -arlh /mnt/temp
totale 2,1G
drwx------ 2 root root 16K dic 12 19:58 lost+found
-rw-r--r-- 1 root root 2,0G dic 12 20:13 another_random_data.bin
drwxr-xr-x 8 root root 4,0K mag 29 2015 ..
drwxr-xr-x 3 root root 4,0K dic 12 20:14 .
root@iMac-Chiara:~# df -h /repository
File system Dim. Usati Dispon. Uso% Montato su
/dev/sda3 275G 261G 484M 100% /repository
root@iMac-Chiara:~#
Như mong đợi, với tệp thưa thớt, hành vi giống hệt như cung cấp mỏng: một khi được phân bổ, không gian lưu trữ có thể được lấy lại khi tệp bị xóa. Nhưng điều này, nói chung, là OK. Không bạn
Vì vậy, tại thời điểm này, câu trả lời cho câu hỏi của bạn nên được hoàn thành. Đúng?
Thêm vào:
Hãy xem điều gì xảy ra khi bộ lưu trữ gạch chân bị đầy:
root@iMac-Chiara:~# dd if=/dev/zero of=/mnt/temp/a_third_random_data.bin bs=1G count=2
2+0 record dentro
2+0 record fuori
2147483648 byte (2,1 GB) copiati, 26,7142 s, 80,4 MB/s
root@iMac-Chiara:~#
Gì? có vẻ như nó bị khuất phục! Làm thế nào điều này đã có thể? Hãy kiểm tra!
root@iMac-Chiara:~# ls -arlh /mnt/temp
totale 4,1G
drwx------ 2 root root 16K dic 12 19:58 lost+found
-rw-r--r-- 1 root root 2,0G dic 12 20:17 a_third_random_data.bin
-rw-r--r-- 1 root root 2,0G dic 12 20:13 another_random_data.bin
drwxr-xr-x 8 root root 4,0K mag 29 2015 ..
drwxr-xr-x 3 root root 4,0K dic 12 20:17 .
root@iMac-Chiara:~#
Uhm ... Có vẻ ổn. Chúng tôi có chắc không
root@iMac-Chiara:~# df /repository
File system 1K-blocchi Usati Disponib. Uso% Montato su
/dev/sda3 288110208 275070448 0 100% /repository
chúng ta đã hết chỗ Không có lỗi!
Ngay cả khi thật tuyệt khi điều tra những gì thực sự đã xảy ra ... Tôi sẽ để điều này cho sự tò mò và / hoặc kỹ năng xử lý sự cố của các thành viên ServerFault khác ;-)
Chúc vui vẻ!
BTW: Tôi đã thử nghiệm tất cả những điều trên, tại đây:
root@iMac-Chiara:~# cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=13.04
DISTRIB_CODENAME=raring
DISTRIB_DESCRIPTION="Ubuntu 13.04"
root@iMac-Chiara:~# uname -r
3.8.0-31-generic
root@iMac-Chiara:~# dpkg -l cryptsetup-bin
[...]
ii cryptsetup-bin 2:1.4.3-4ubuntu2 amd64 disk encryption support - command line tools
root@iMac-Chiara:~#