예! 가능한 것 같습니다. 어떻게 달성 할 수 있는지 확인합시다. 이는 파일 시스템이 스파 스 파일의 최대 크기에 도달 할 때 더 많은 데이터를 써야하는 경우 '공간 부족'오류를보고하므로 실제 주문형 파일 시스템을 생성하지는 않습니다.
처음에는 가상화 시나리오에서 스토리지 공간을 절약하는 잘 알려진 기술인 Thin Provisioning 을 조사했습니다 . 불행히도, 일반적인 Linux 유스 케이스에서는 LVM 에서만 사용할 수있는 것 같습니다 . 이것이 귀하의 질문 범위를 벗어난 것처럼 보이므로 다른 것을 검색했습니다.
내가 조사한 두 번째 개념은 Sparse File 입니다. 이것은 귀하의 질문에 정확히 맞으며 ... 내 초기 의심은 " 좋아요. 스파 스 파일을 만들 수 있습니다. 그러나 파일을 LUKS 컨테이너로 초기화하면 어떻게됩니까? 그러한 초기화는 사용 가능한 모든 공간을 할당합니까? 이러한 컨테이너에서 파일 시스템을 초기화하면 어떻게됩니까? mkfs.ext4
사용 가능한 모든 공간을 할당합니까? ". 나는 대답이 없었기 때문에 시도하기로 결정했습니다. 무슨 일이 있었는지 보자.
파일 시스템 내에 3.3G 의 여유 공간 만있는 현재 시스템에서 시작하겠습니다 /repository
.
root@iMac-Chiara:~# df -h /repository
File system Dim. Usati Dispon. Uso% Montato su
/dev/sda3 275G 258G 3,3G 99% /repository
이러한 파일 시스템 내에 10G 스파 스 파일을 작성해 봅시다 :
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
그리고 그것을 확인합시다 ... 그것은 정말로 드문 파일입니다 :
root@iMac-Chiara:~# ls -lh /repository/file_container.img
-rw-r--r-- 1 root root 10G dic 12 19:48 /repository/file_container.img
확인. 따라서 이전에 3.3G의 여유 공간이있는 파일 시스템에 10G 파일이 있습니다. 아직 여유 공간이 얼마나됩니까?
root@iMac-Chiara:~# df -h /repository
File system Dim. Usati Dispon. Uso% Montato su
/dev/sda3 275G 258G 3,3G 99% /repository
여전히 3.3G. 좋은. 스파 스 파일은 실제로 ... sparse-file ;-) 10G 파일 내에 LUKS 컨테이너를 만들어서 단계적으로 진행해 봅시다. 공간이 부족한지 봅시다 :
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:~#
이제 secrets
여유 공간이 3.3G 인 파일 시스템에 저장된 10G 스파 스 파일 위에 정의 된 열린 컨테이너가 있습니다.
아직 여유 공간이 얼마나됩니까?
root@iMac-Chiara:~# df -h /repository
File system Dim. Usati Dispon. Uso% Montato su
/dev/sda3 275G 258G 3,3G 99% /repository
훌륭한! 여전히 3.3GB입니다. 우리의 암호화 된 컨테이너는 공간이 거의 필요하지 않았습니다!
모든 것이 정상인지 또는 설정에 이상한 것이 있는지 확인합시다.
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
모든 것이 정상인 것 같으므로 컨테이너를 사용하여 무언가를 저장해 봅시다. 그 안에 EXT4 파일 시스템을 만들어 봅시다 :
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:~#
"공간 부족"에 대한 추적이 없기 때문에 작동 한 것 같습니다. 점검 해보자:
root@iMac-Chiara:~# df -h /repository
File system Dim. Usati Dispon. Uso% Montato su
/dev/sda3 275G 258G 3,2G 99% /repository
음 .. 뭔가가 일어났다. 우리는 100M의 공간을 잃었지만 .... 예상되는 동작입니다. EXT4 파일 시스템 DO을 만들 려면 많은 메타 데이터를 작성해야합니다. 따라서 생성 프로세스에서 일부 공간이 사용 된 것은 정상입니다.
"작동하는"EXT4 파일 시스템입니까?
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
예! 괜찮아 보인다.
이제 우리는 3.3G 파일 시스템 내에 저장된 10G 스파 스 파일 위에 정의 된 열린 LUKS 컨테이너 안에 EXT4 파일 시스템을 작성했습니다.
공간을 "주문형"으로 할당하여 모든 것이 올바르게 작동하는지 봅시다.
500M의 더미 데이터를 암호화 된 FS에 쓰는 것으로 시작하겠습니다
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:~#
파일 작성에 성공 했습니까?
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
그렇게 보입니다.
실제 파일 시스템은 어떻게 되었습니까?
root@iMac-Chiara:~# df -h /repository
File system Dim. Usati Dispon. Uso% Montato su
/dev/sda3 275G 259G 2,5G 100% /repository
우아! 우리는 엄청나게 500M 이상을 잃어 버렸습니다. 물리적 공간이 실제로 필요할 때 할당되므로 BTW가 좋습니다!
다른 2GB 파일을 저장합시다 :
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:~#
어떻게 된 거예요?
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:~#
정말 좋아요 파일을 삭제하면 어떻게됩니까?
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:~#
예상대로 스파 스 파일의 동작은 씬 프로비저닝과 동일합니다. 일단 할당되면 파일을 삭제할 때 스토리지 공간을 다시 요청할 수 없습니다. 그러나 이것은 일반적으로 괜찮습니다. 그렇지 않습니까?
따라서이 시점에서 귀하의 질문에 대한 답변이 완료되어야합니다. 권리?
부가:
밑줄 스토리지가 가득 차면 어떻게되는지 봅시다 :
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:~#
뭐? 성공한 것 같습니다! 이것이 어떻게 가능 했습니까? 점검 해보자!
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:~#
음 ... 괜찮아 보인다. 확실합니까?
root@iMac-Chiara:~# df /repository
File system 1K-blocchi Usati Disponib. Uso% Montato su
/dev/sda3 288110208 275070448 0 100% /repository
우리는 공간이 부족합니다! 오류없이!
실제로 일어난 일을 조사하는 것이 좋을지라도 ... 다른 ServerFault 회원의 호기심 및 / 또는 문제 해결 기술에 맡길 것입니다. ;-)
즐기세요!
BTW : 위의 모든 것을 여기에서 테스트했습니다.
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:~#