Penyimpanan berjenjang dengan BTRFS - bagaimana cara melakukannya?
NETGEAR menggunakan BTRFS di ReadyNAS OS mereka, dan mengimplementasikan Penyimpanan Bertingkat di versi terbaru mereka. Mereka mulai dengan tingkat "Metadata" hanya di ReadyNAS v6.9, dan kemudian menambahkan "Tingkat Data" di v6.10. Sistem menggunakan SSD sebagai Tier-0 untuk mempercepat akses ke HDD yang lebih lambat dalam sistem. Deskripsi sistem menyatakan bahwa metadata akan berada di SSD dalam kedua kasus, dan dalam kasus "Tingkat Data" juga data yang baru ditulis akan masuk ke SSD terlebih dahulu, dan kemudian akan dimigrasi ke HDD secara berkala, atau ketika Tingkat SSD terisi hingga tingkat yang ditentukan.
ReadyNAS menggunakan BTRFS di atas HDD RAID-ed dalam penginstalan normalnya - misalnya sistem saya memiliki RAID5 yang terbuat dari 4 disk, yang dilihat / digunakan BTRFS sebagai satu perangkat.
Melihat bagaimana Tiering diimplementasikan, sepertinya pengaturan "Metadata" dan "Data Tier" dilakukan dengan menambahkan array RAID kedua, yang hanya dibuat dari SSD, ke array RAID HDD utama, dan mengubah perangkat tunggal awal BTRFS menjadi multi-perangkat.
Apa yang tidak dapat saya pahami adalah bagaimana migrasi dilakukan, dan juga bagaimana kasus "Metadata" berhasil memisahkan metadata dari data, sehingga hanya metadata yang masuk ke SSD? Selain itu, bagaimana mode "Tingkat Data" mengarahkan penulisan sepenuhnya ke tingkat SSD?
Ada ide?
Jawaban
Oke, inilah yang saya temukan terjadi selama saldo periodik:
Proses berikut dimulai di host:
btrfs balance start -dsweep lt:/dev/md127:7 /data LANG=en_US.UTF-8 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin DBUS_SESSION_BUS_ADDRESS=unix:path=/var/netatalk/spotlight.ipc TRACKER_USE_CONFIG_FILES=1 TRACKER_USE_LOG_FILES=1 XDG_DATA_HOME=/apps/.xdg/local/share XDG_CONFIG_HOME=/apps/.xdg/config XDG_CACHE_HOME=/apps/.xdg/cache
di mana / data adalah volume data berjenjang saya, / dev / md127 adalah array SSD yang digunakan sebagai buffer / cache.
Proses ini berjalan sampai data dari tingkat SSD dipindahkan hampir sepenuhnya ke tingkat HDD - misalnya di suatu tempat di sepanjang cara yang saya lihat:
btrfs fi sh /data
Label: '0a44c6bc:data' uuid: ed150b8f-c986-46d0-ada8-45ee219acbac
Total devices 2 FS bytes used 393.14GiB
devid 1 size 7.12TiB used 359.00GiB path /dev/md126
devid 2 size 114.68GiB used 42.06GiB path /dev/md127
dan kemudian turun hingga penggunaan tingkat SSD hampir mencapai nol. Yang aneh adalah sejauh ini saya tidak dapat menjalankan perintah ini secara manual.
Saya masih tidak bisa menemukan filter keseimbangan 'sapuan'.
Inilah yang ditunjukkan -bantuan:
# btrfs balance start --help
usage: btrfs balance start [options] <path>
Balance chunks across the devices
Balance and/or convert (change allocation profile of) chunks that
passed all filters in a comma-separated list of filters for a
particular chunk type. If filter list is not given balance all
chunks of that type. In case none of the -d, -m or -s options is
given balance all chunks in a filesystem. This is potentially
long operation and the user is warned before this start, with
a delay to stop it.
-d[filters] act on data chunks
-m[filters] act on metadata chunks
-s[filters] act on system chunks (only under -f)
-v be verbose
-f force reducing of metadata integrity
--full-balance do not print warning and do not delay start
--background|--bg
run the balance as a background process
tapi ini tidak menjelaskan cara memetakan ke bagian " lt:/dev/md127:7
" dari perintah yang berjalan secara berkala:
btrfs balance start -dsweep lt:/dev/md127:7 /data
Apa artinya di sini: Jalankan hingga penggunaan data / dev / md127 turun di bawah 7%?!?
Ini harus merupakan cronjob yang berjalan secara teratur dan melakukan migrasi.
Periksa /etc/cron.d untuk entri yang mungkin melakukan itu.
Anda mengatakan Netgear telah menemukan cara untuk melakukan apa yang memungkinkan Anda untuk melakukan Caching Bertingkat MergerFS, dalam konfigurasi yang mudah digunakan dan sangat sederhana: https://github.com/trapexit/mergerfs#tiered-caching
buat 2 kumpulan MergerFS A) satu dengan semua drive HDD termasuk SSD ("POOL", tier0) dan setel untuk menulis ke perangkat dengan ruang kosong paling sedikit (kecuali ia memiliki X sisa ruang kosong). B) pool kedua ("POOL-ARCHIVE", tier1) hanya berisi HDD.
Pengguna Anda dan semua aplikasi hanya menggunakan jalur dari kumpulan pertama.
Skrip nightly yang menyalin semua yang belum disentuh selama X hari terakhir dari kumpulan pertama ke kumpulan kedua (mudah, karena drive-nya sama, ini hanya akan menyebabkan data di SSD disalin). Ini adalah satu-satunya item yang menggunakan jalur kumpulan kedua.
Ini persis bagaimana saya mengatur homeserver saya. Semua drive berformat BtrFS. Saya tidak (tidak bisa, dengan solusi ini) menggunakan Raid.
Pro:
- Ketika drive gagal, Anda hanya kehilangan data di drive itu (dan saya mengurangi ini dengan menggunakan SnapRAID sebagai sistem cadangan pertama). Anda tidak kehilangan seluruh kumpulan seperti dengan BtrFS-RAID0.
- Ini sangat mudah diatur. 2 dudukan di / etc / fstab Anda. BAM, cache berjenjang!
- Anda selalu menggunakan SSD terlebih dahulu (kecuali jika hanya tersisa ruang kosong sebanyak X). Memberi Anda kecepatan maksimal.
Kontra:
- Anda tidak dapat menggunakan subvolume BtrFS (mencakup seluruh disk) dalam kumpulan MergerFS Anda karena MergerFS berjalan di atas sistem file di ruang pengguna.
- Ini juga berarti Anda tidak dapat melakukan snapshot subvolume dalam kumpulan Anda. Saya ingin memiliki mesin waktu seperti snapshot per folder data pengguna di kolam saya.
Saya sangat menyukai MergerFS karena kesederhanaannya, tetapi con # 2 membuat saya sangat tertarik pada bagaimana Netgear meretas solusi serupa menggunakan BTRFS.