Saya mencoba membuat sistem file terenkripsi, tumbuh sesuai kebutuhan dengan Linux. Saya kenal dengan LUKS dan cryptsetup.
Saya dapat membuat file kosong:
fallocate -l 512M /root/image
Saya dapat membuat wadah LUKS di atasnya:
cryptsetup -y luksFormat /root/image
Dan kemudian "buka" itu:
cryptsetup luksOpen /root/image luksvolume
Pada titik ini, saya bisa membuat sistem file di atasnya:
mkfs.ext4 -j /dev/mapper/luksvolume
Ini semua bagus dan keren. Namun, itu tidak membahas bagian "tumbuh sesuai permintaan" dari pertanyaan.
Idenya adalah bahwa menyalin file 2Gb pada sistem file terenkripsi akan "memperluas" gambar sehingga cukup besar untuk memuat file tersebut.
Apakah mungkin untuk melakukannya?
mount
encryption
disk-volume
luks
Merc
sumber
sumber
Jawaban:
Iya! Sepertinya itu mungkin. Mari kita periksa bagaimana itu bisa dicapai. Perhatikan bahwa ini tidak membuat sistem file grow-on-demand sejati, karena ketika filesystem mencapai ukuran maksimum file jarang, itu akan melaporkan kesalahan 'di luar ruang' jika lebih banyak data masih perlu ditulis.
Awalnya, saya menyelidiki Thin Provisioning , sebuah teknologi terkenal untuk menghemat ruang penyimpanan dalam skenario virtualisasi. Sayangnya, dalam kasus penggunaan Linux yang umum, tampaknya hanya tersedia dengan LVM . Karena ini tampaknya sedikit di luar cakupan pertanyaan Anda, saya mencari sesuatu yang lain.
Konsep kedua yang saya selidiki adalah File Jarang . Ini persis sesuai dengan pertanyaan Anda dan ... keraguan awal saya adalah: " Oke. Saya dapat membuat File Jarang. Tetapi apa yang terjadi ketika saya menginisialisasi sebagai wadah LUKS? Apakah inisialisasi tersebut akan mengalokasikan semua ruang yang tersedia? Jika tidak, apa yang akan terjadi ketika saya akan menginisialisasi sistem file dalam wadah seperti itu? Apakah akan
mkfs.ext4
mengalokasikan semua ruang yang tersedia? " Karena saya tidak punya jawaban, saya memutuskan untuk mencoba. Jadi, mari kita lihat apa yang terjadi.Mari kita mulai dari sistem saya saat ini, di mana saya hanya memiliki ruang kosong 3.3G dalam sistem
/repository
file:Mari kita buat file 10G jarang dalam sistem file seperti itu, dengan:
dan mari kita verifikasi bahwa ... ini benar-benar file yang jarang:
BAIK. Jadi kita memiliki file 10G , dalam sistem file yang sebelumnya memiliki ruang kosong 3,3G. Berapa banyak ruang kosong yang saya miliki?
Masih 3.3G. Bagus. File jarang benar-benar ... file jarang ;-) Mari selangkah lebih maju, dengan membuat wadah LUKS dalam file 10G dan ... mari kita lihat apakah kita kehabisan ruang:
Jadi sekarang saya memiliki
secrets
wadah terbuka yang ditetapkan di atas file jarang 10G saya yang disimpan dalam sistem file yang hanya memiliki ruang kosong 3,3G.Berapa banyak ruang kosong yang saya miliki?
Hebat! Masih 3.3GB. Wadah terenkripsi kami sebagian besar tidak membutuhkan ruang!
Mari kita periksa apakah semuanya baik-baik saja atau ada sesuatu yang aneh dengan pengaturan kami:
Semuanya tampak baik-baik saja jadi mari kita mulai menggunakan wadah seperti itu untuk menyimpan sesuatu. Mari kita mulai dengan membuat sistem file EXT4 di dalamnya:
Sepertinya itu berhasil, karena tidak ada jejak "di luar angkasa". Mari kita periksa:
Uhm .... jadi sesuatu terjadi. Kami kehilangan sekitar 100M ruang tetapi .... ini adalah perilaku yang diharapkan: pembuatan sistem file EXT4 DO memerlukan penulisan banyak metadata. Jadi wajar jika beberapa ruang telah digunakan oleh proses pembuatan.
Apakah itu sistem file EXT4 "yang berfungsi"?
Iya! Ini terlihat oke.
Jadi sekarang kita memiliki sistem file EXT4 yang ditulis di dalam wadah LUKS terbuka yang didefinisikan di atas file jarang 10G yang disimpan dalam sistem file 3.3G.
Mari kita lihat apakah semuanya bekerja dengan benar, dengan mengalokasikan ruang "sesuai permintaan".
Mari kita mulai dengan menulis 500 juta data boneka ke FS terenkripsi
Sudahkah kita berhasil membuat file?
Terlihat begitu.
Apa yang terjadi pada sistem file kita yang sebenarnya?
Uau! Kami "kehilangan" sligthly lebih dari 500 juta. Itu bagus, BTW, karena ruang fisik benar-benar dialokasikan sesuai permintaan!
Mari kita simpan file 2GB lainnya:
Apa yang terjadi?
Sangat bagus. Apa yang terjadi jika kami menghapus file?
Seperti yang diharapkan, dengan file-sparse perilaku persis seperti penyediaan tipis: sekali dialokasikan, ruang penyimpanan tidak dapat diklaim kembali ketika file dihapus. Tapi ini, secara umum, tidak masalah. Bukan?
Jadi pada titik ini, jawaban atas pertanyaan Anda harus lengkap. Baik?
Tambahan:
Mari kita lihat apa yang terjadi ketika penyimpanan garis bawah menjadi penuh:
Apa? sepertinya berhasil! Bagaimana ini bisa terjadi? Mari kita periksa!
Uhm ... Kelihatannya ok. Apakah kita yakin
kita kehabisan ruang! Tanpa kesalahan!
Bahkan jika akan lebih baik untuk menyelidiki apa yang sebenarnya terjadi ... Saya akan menyerahkan ini pada keingintahuan Anda dan / atau keterampilan pemecahan masalah anggota ServerFault lainnya ;-)
Selamat bersenang-senang!
BTW: Saya sudah menguji semua hal di atas, di sini:
sumber
rsync
memiliki--sparse
opsi yang seharusnya membuat file jarang pada disk tujuan.