Próbuję utworzyć zaszyfrowany, rosnący w miarę potrzeb system plików w systemie Linux. Znam LUKS i cryptsetup.
Mogę stworzyć pusty plik:
fallocate -l 512M /root/image
Mogę na nim utworzyć kontener LUKS:
cryptsetup -y luksFormat /root/image
A potem „otwórz” to:
cryptsetup luksOpen /root/image luksvolume
W tym momencie mogę po prostu stworzyć na nim system plików:
mkfs.ext4 -j /dev/mapper/luksvolume
Wszystko w porządku i eleganckie. Nie dotyczy to jednak części pytania „rośnie na żądanie”.
Chodzi o to, że skopiowanie pliku 2 Gb w zaszyfrowanym systemie plików „rozszerzy” obraz, aby był wystarczająco duży, aby mógł go zawierać.
Czy to w ogóle możliwe?
mount
encryption
disk-volume
luks
Merc
źródło
źródło
Odpowiedzi:
Tak! Wygląda na to, że to możliwe. Sprawdźmy, jak można to osiągnąć. Zauważ, że nie tworzy to prawdziwego systemu plików na żądanie, ponieważ gdy osiągnie maksymalny rozmiar pliku rozrzedzonego, zgłosi błędy „brak miejsca”, jeśli nadal trzeba zapisać więcej danych.
Początkowo badałem Thin Provisioning , dobrze znaną technologię pozwalającą zaoszczędzić miejsce na dysku w scenariuszach wirtualizacji. Niestety, w typowych przypadkach użycia Linuksa wydaje się, że jest dostępny tylko z LVM . Ponieważ wydaje się to nieco poza zakresem twojego pytania, szukałem czegoś innego.
Drugą koncepcją, którą zbadałem, jest Sparse File . Jest to dokładnie dostosowane do twojego pytania i ... początkowo wątpiłem: „ OK. Mogę utworzyć rzadki plik. Ale co się stanie, gdy zainicjuję go jako kontener LUKS? Czy taka inicjalizacja przydzieli całą dostępną przestrzeń? Jeśli nie, co się stanie, gdy zainicjuję system plików w takim kontenerze? Czy
mkfs.ext4
przydzieli całą dostępną przestrzeń? ”. Ponieważ nie miałem odpowiedzi, postanowiłem spróbować. Zobaczmy więc, co się stało.Zacznijmy od mojego obecnego systemu, w którym mam tylko 3,3 G wolnego miejsca w
/repository
systemie plików:Stwórzmy 10G rzadki plik w takim systemie plików, wraz z:
i sprawdźmy, czy ... to naprawdę rzadki plik:
OK. Mamy więc plik 10G w systemie plików, który wcześniej miał 3,3G wolnego miejsca. Ile jeszcze wolnego miejsca mam?
Nadal 3,3G. Miły. Sparse-file to naprawdę ... sparse-file ;-) Przejdźmy dalej, tworząc kontener LUKS w takim pliku 10G i ... zobaczmy, czy zabraknie miejsca:
Więc teraz mam otwarty
secrets
kontener zdefiniowany na moim rzadkim pliku 10G przechowywanym w systemie plików posiadającym tylko 3,3G wolnego miejsca.Ile jeszcze wolnego miejsca mam?
Wspaniale! Nadal 3,3 GB. Nasz zaszyfrowany pojemnik nie wymagał głównie miejsca!
Sprawdźmy, czy wszystko jest w porządku lub czy jest coś dziwnego w naszej konfiguracji:
Wszystko wydaje się w porządku, więc zacznijmy używać takiego pojemnika do przechowywania czegoś. Zacznijmy od utworzenia w nim systemu plików EXT4:
Wygląda na to, że zadziałało, ponieważ nie było śladu „brak miejsca”. Sprawdźmy:
Uhm ... więc coś się stało. Straciliśmy coś 100M przestrzeni, ale .... jest to oczekiwane zachowanie: stworzenie systemu plików EXT4 DO wymagają pisanie partii metadanych. Więc to normalne, że część przestrzeni została wykorzystana przez proces tworzenia.
Czy to „działający” system plików EXT4?
Tak! Wygląda dobrze.
Więc teraz mamy system plików EXT4 zapisany w otwartym kontenerze LUKS zdefiniowanym na szczycie rzadkiego pliku 10G przechowywanego w systemie plików 3.3G.
Sprawdźmy, czy wszystko działa poprawnie, przydzielając miejsce „na żądanie”.
Zacznijmy od zapisania 500 mln fałszywych danych w zaszyfrowanym FS
Czy udało nam się stworzyć plik?
Wygląda tak.
Co się stało z naszym prawdziwym systemem plików?
Uau! „Straciliśmy” nieco ponad 500 milionów. To dobrze, BTW, ponieważ przestrzeń fizyczna jest naprawdę przydzielana na żądanie!
Przechowajmy kolejny plik 2 GB:
Co się stało?
Bardzo miłe. Co się stanie, jeśli usuniemy plik?
Zgodnie z oczekiwaniami, w przypadku plików rzadkich zachowanie jest dokładnie takie, jak w przypadku alokacji uproszczonej: po przydzieleniu nie można odzyskać miejsca w pamięci po usunięciu pliku. Ale to ogólnie jest OK. Nie ty
W tym momencie odpowiedź na twoje pytanie powinna być kompletna. Dobrze?
Dodanie:
Zobaczmy, co się stanie, gdy pamięć podkreślająca zapełni się:
Co? wygląda na to, że się udało! Jak to było możliwe? Sprawdźmy!
Uhm ... Wygląda dobrze. Jesteśmy pewni?
zabrakło nam miejsca! Bez żadnego błędu!
Nawet jeśli byłoby miło zbadać, co się naprawdę wydarzyło ... Pozostawię to twojej ciekawości i / lub umiejętności rozwiązywania problemów innych członków ServerFault ;-)
Baw się dobrze!
BTW: Testowałem wszystkie powyższe, tutaj:
źródło
rsync
ma--sparse
opcję, która powinna tworzyć rzadkie pliki na dysku docelowym.