TL; DR Metadata (jika btrf tidak mengalami kondisi ruang rendah umum) secara otomatis akan meningkat. Dalam hal tidak ada ruang bebas yang tidak terisi ada, peningkatan otomatis akan ditentukan. Namun, jika bagian data btrfs
telah dialokasikan lebih banyak ruang daripada yang dibutuhkan, maka dimungkinkan untuk mendistribusikan ulang ini. Ini disebut balance
-ing dalam btrfs.
Dengan asumsi bahwa ada cukup memori yang tidak terisi pada perangkat blok pendukung btrfs
, maka bagian Metadata dari sistem file mengalokasikan - seperti yang diasumsikan oleh OP - secara otomatis memori untuk menambah / memperluas metadata.
Oleh karena itu, jawabannya adalah: Ya (asalkan tidak ada memori rendah / kondisi ruang kosong di btrfs
) , maka metadata akan meningkat secara otomatis, seperti:
(1) Kami telah melihat beberapa pengaturan alokasi awal btrfs (pada 40GB
perangkat)
$> btrfs filesystem df /
Data, single: total=25.00GiB, used=24.49GiB
System, single: total=32.00MiB, used=16.00KiB
Metadata, single: total=1.55GiB, used=1.33GiB
GlobalReserve, single: total=85.41MiB, used=0.00B
(2) Seperti dapat dilihat, ruang yang dialokasikan dalam sistem file untuk menyimpan Metadata adalah 1,55GiB, di mana 1,33GiB, maka hampir semua digunakan (ini mungkin situasi yang terjadi dalam kasus OP)
(3) Kami sekarang memprovokasi penambahan metadata yang akan ditambahkan. Untuk melakukannya, kami menyalin folder / home menggunakan --reflink=always
opsi cp
perintah.
$> cp -r --reflink=awlways /home /home.copy
(4) Karena (seperti yang kita asumsikan ada banyak file di / home), yang ditambahkan banyak data baru ke sistem file, yang karena kita --reflink
menggunakan sedikit atau tidak ada ruang tambahan untuk data aktual, ia menggunakan Copy-on-Write, mekanisme. Singkatnya, sebagian besar Metadata ditambahkan ke sistem file. Karena itu kita dapat memiliki pandangan lain
$> btrfs filesystem df /
Data, single: total=25.00GiB, used=24.65GiB
System, single: total=32.00MiB, used=16.00KiB
Metadata, single: total=2.78GiB, used=2.45GiB
GlobalReserve, single: total=85.41MiB, used=0.00B
Seperti yang bisa dilihat, ruang yang dialokasikan untuk Metadata yang digunakan dalam hal btrfs
ini secara otomatis meningkat diperluas.
Karena ini sangat otomatis, biasanya tidak terdeteksi oleh pengguna. Namun, ada beberapa kasus, sebagian besar di mana seluruh sistem file sudah cukup terisi. Dalam kasus tersebut, btrfs
mungkin mulai "gagap" dan gagal untuk secara otomatis meningkatkan ruang yang dialokasikan untuk Metadata. Alasannya adalah, misalnya, bahwa semua ruang telah dialokasikan ke bagian-bagian (Data, Sistem, Metadata, GlobalReserve). Yang membingungkan, bisa jadi belum ada ruang yang jelas. Contohnya adalah output ini:
$> btrfs filesystem df /
Data, single: total=38.12GiB, used=25.01GiB
System, single: total=32.00MiB, used=16.00KiB
Metadata, single: total=1.55GiB, used=1.45GiB
GlobalReserve, single: total=85.41MiB, used=0.00B
Seperti dapat dilihat, sistem semuanya 40GiB
, namun alokasi agak tidak aktif balance
, karena sementara masih ada ruang untuk data file baru, Metadata (seperti dalam kasus OP) rendah. Alokasi memori otomatis untuk perangkat yang mendukung sistem btrfs
file tidak lagi dimungkinkan (cukup tambahkan total alokasi, 38.12G + 1.55G + .. ~ = 40GiB).
Namun karena ada kelebihan ruang kosong yang dialokasikan ke data
bagian sistem file, sekarang dapat berguna, diperlukan untuk menyeimbangkan btrfs. Saldo berarti mendistribusikan kembali ruang yang sudah dialokasikan.
Dalam kasus OP, dapat diasumsikan bahwa, karena alasan tertentu, telah terjadi ketidakseimbangan antara berbagai bagian btrfs
alokasi.
Sayangnya, perintah sederhana sudo btrfs balance -dusage=0
, yang pada prinsipnya harus mencari blok kosong (dialokasikan untuk data) dan menempatkannya ke pengguna yang lebih baik (yang akan menjadi ruang yang hampir habis untuk Metadata), mungkin gagal, karena tidak ada blok data yang benar-benar kosong dapat ditemukan.
The btrfs
pengembang merekomendasikan untuk maka berturut-turut meningkatkan batas penggunaan "ketika data blok harus disusun kembali untuk ruang reclaim"
Makanya, jika hasilnya
$> sudo btrfs balance -dusage=0
Done, had to relocate 0 out of 170 chunks
tidak menunjukkan relokasi, seseorang harus melakukan beberapa
$> sudo btrfs balance -dusage=5
Done, had to relocate 0 out of 170 chunks <--(again fail)
$> sudo btrfs balance -dusage=10
Done, had to relocate 0 out of 170 chunks <--(again fail)
$> sudo btrfs balance -dusage=15
Done, had to relocate 2 out of 170 chunks <--(success)
Jawaban lain mengisyaratkan pengaruh btrfs
nodesize, yang sedikit memengaruhi seberapa cepat metadata akan meningkat. Nodesize adalah (seperti yang disebutkan dalam jawaban lain) hanya ditetapkan sekali pada mkfs.btrfs
waktu pembuatan filesystem. Secara teori, seseorang dapat mengurangi ukuran Metadata jika itu mungkin untuk mengubah ke nilai yang lebih rendah untuk nodesize, jika itu mungkin (itu tidak!). Namun demikian, nodesize tidak akan dapat membantu memperluas atau menambah ruang metadata yang dialokasikan dengan cara apa pun. Sebaliknya, itu mungkin hanya membantu menghemat ruang sejak awal. Nodesize yang lebih kecil, namun tidak dijamin untuk mengurangi ukuran metadata. Memang, beberapa kasus mungkin menunjukkan bahwa nodesize yang lebih besar mengurangi panjang btrf pohon-traversal, karena catatan dapat mengandung lebih banyak "tautan".