Saya ingin dapat menggabungkan perubahan dari sistem file atas dari mount overlay ke sistem file yang lebih rendah.
Saya tertarik keduanya online (yaitu menggabungkan sementara hamparan terpasang) dan luring (lepaskan overlay lalu gabungkan) solusi.
Saya telah menemukan beberapa solusi offline, yang telah saya tambahkan sebagai jawaban.
Adakah yang tahu tentang online solusi? Akan lebih baik jika Anda memiliki perintah tipe “commit” yang dapat Anda jalankan untuk menggabungkan lapisan-lapisan saat overlay masih terpasang.
Sesuatu seperti ini telah ditanyakan dalam pertanyaan berikut tanpa jawaban:
- Apakah ada cara untuk memodifikasi satu file dan menyinkronkan ke direktori yang lebih rendah di OverlayFs?
- Bagaimana cara memodifikasi file yang lebih rendah melalui direktori OverlayFS?
- OverlayFS Mengedit File dengan Mulus di Direktori Bawah
- OverlayFS – Bagaimana cara membuat perubahan pada sistem file atas tetap ada tanpa melepasnya?
Komentar dalam postingan ini menyarankan berbagai mergerf dan bcache, keduanya memecahkan kasus penggunaan tertentu tetapi bukan kasus penggunaan agnostik sistem file generik yang disediakan overlay.
Tujuan saya adalah memiliki kotak pasir sistem file yang aman dengan snapshot yang dapat digunakan dengan aplikasi Linux apa pun melalui sistem file apa pun (jika praktis), memungkinkan Anda untuk memutar kembali perubahan atau mengkomitnya secara manual saat Anda siap.
Saya curiga bahwa Linux arus utama modern memiliki semua fitur yang diperlukan untuk melakukan ini, berkat semua inovasi sandboxing/virtualisasi beberapa tahun terakhir, jika saja saya tahu cara menggunakannya.
Jawaban yang Diterima:
Upaya online solusi, tapi belum cukup.
Penyiapan (misalnya /tmp
direktori, sebagai root):
LOWER=$HOME
mkdir u1 w1 o1 O
mount -t overlay overlay -o lowerdir=$LOWER,upperdir=u1,workdir=w1 o1
mount --bind o1 O
Kemudian Anda dapat bekerja di O
direktori, yang merupakan hamparan di atas $LOWER
. Saat Anda ingin melakukan snapshot:
mkdir u2 w2 o2
mount -t overlay overlay -o lowerdir=o1,upperdir=u2,workdir=w2 o2
(Perhatikan bahwa hamparan berlapis seperti ini tidak akan berfungsi pada kernel lama).
Tapi kemudian saya ingin beberapa cara untuk secara atom mengubah pengikatan mount di O
untuk menunjuk ke o2
bukannya o1
. Saya tidak tahu bagaimana melakukan ini selain:
umount O
mount --bind o2 O
(Bukan atom; ada jendela di mana O
dilepas).
Idealnya, proses yang berjalan dapat terus berjalan tanpa mengetahui bahwa sistem file yang mendasari O
telah berubah dari o1
ke o2
. Saya tidak tahu apakah ini mungkin, atau apakah mengubah sistem file yang mendasari O
seperti ini akan mengganggu aplikasi yang terbuka terlalu banyak. Saya perlu menyelidiki lebih lanjut.
Kemudian, sekali O
telah dialihkan ke o2
, kita dapat me-remount o1
baca-saja sebagai tindakan pencegahan, lalu lakukan penggabungan offline menggunakan misalnya rdiffdir atau overlayfs-tools.
Terakhir, kami ingin beberapa cara untuk me-remount o2
sebagai lowerdir=$HOME,upperdir=u2,workdir=w2
sehingga o1
, u1
dan w1
(semua direktori sekarang kosong) dapat dihapus. Sekali lagi, saya tidak tahu apakah ini mungkin.
Jika tidak, kita dapat mencapai snapshot hanya dengan menumpuk overlay lebih dalam dan lebih dalam dan membiarkan dir overlay dan atas untuk masing-masing terpasang tanpa mencoba menggabungkan atau membersihkan. Tetapi mungkin ada batasan jumlah overlay bersarang yang dapat dipasang. Dan pada titik tertentu, kita masih perlu menggabungkan lapisan ke bawah jika kita ingin mempertahankan perubahan.