Bagaimana cara memperluas metadata btrf?

9

btrfsMetadata saya semakin penuh. (Saya membuat snapshot per jam menggunakan btrbk.)

Bagaimana cara menambah / memperluas ruang yang dialokasikan untuk metadata btrfssistem file?

Atau apakah itu diperluas secara otomatis?

Tom Hale
sumber
apakah Anda menggunakan partisi hanya untuk cadangan?
Rui F Ribeiro
1
Subvolume @homedipasang di /home, dengan btrbkcadangan dalam subvolume btrbk-snap. Untuk sistem file yang mendukung hingga 2 ^ 64 snapshot, saya berharap ini memiliki cara untuk meningkatkan ukuran metadata ...
Tom Hale
Lihatlah perintah keseimbangan btrfs: btrfs.wiki.kernel.org/index.php/Manpage/btrfs-balance
Emmanuel Rosa
@ EmmanuelRosa saya punya. Bagian mana yang menurut Anda berguna?
Tom Hale
Ada yang kedua yang membahas tentang menyeimbangkan kembali metadata. Mungkin dengan filter yang tepat Anda dapat memberikan lebih banyak ruang untuk potongan metadata.
Emmanuel Rosa

Jawaban:

7

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 btrfstelah 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 40GBperangkat)

$> 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=alwaysopsi cpperintah.

$> 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 --reflinkmenggunakan 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 btrfsini 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, btrfsmungkin 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 btrfsfile tidak lagi dimungkinkan (cukup tambahkan total alokasi, 38.12G + 1.55G + .. ~ = 40GiB).

Namun karena ada kelebihan ruang kosong yang dialokasikan ke databagian 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 btrfsalokasi.

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 btrfspengembang 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 btrfsnodesize, yang sedikit memengaruhi seberapa cepat metadata akan meningkat. Nodesize adalah (seperti yang disebutkan dalam jawaban lain) hanya ditetapkan sekali pada mkfs.btrfswaktu 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".

humanityANDpeace
sumber
1

Menurut FAQ pada wiki btrfs , ini tidak mungkin dan tidak mungkin diterapkan.

Bisakah saya mengubah ukuran blok metadata tanpa membuat ulang filesystem?

Tidak, nilai yang diteruskan ke mkfs.btrfs -n SIZE tidak dapat diubah setelah sistem file dibuat. Diperlukan cadangan / pemulihan. Perhatikan, bahwa ini kemungkinan tidak akan pernah diterapkan karena akan memerlukan pembaruan besar untuk fungsionalitas inti.

Anda dapat memigrasi sistem file btrf yang ada ke yang baru yang memiliki yang lebih besar -n SIZE. Anda bahkan dapat menambahkannya ke sistem file yang ada menggunakan btrfs RAID dan balance, kemudian menghapus sistem file yang lama.

Lihat juga bagian tentang drive yang hampir penuh .

etskinner
sumber
2
Ada perbedaan antara nodesize (yang seperti yang Anda nyatakan hanya dapat diatur sekali pada pembuatan filesystem) dan ukuran metadata, yang juga merupakan btrfs filesystem df /perintah yang Metadata, single: total=xxGiB, used=xxxdiwakili oleh garis output .
humanityANDpeace
Apa maksudmu Tentu ada perbedaan, tapi itu bukan masalah pendapat. -nmengatur ukuran setiap blok metadata, sambil btrfs filesystem dfmenunjukkan ruang yang digunakan oleh blok-blok itu. Jika penulis posting asli memiliki terlalu banyak ruang yang diambil oleh metadata vs data aktual, mereka harus mengurangi ukurannya -n, sehingga blok metadata memiliki ukuran minimum yang lebih rendah (lebih sedikit ruang yang digunakan tetapi lebih banyak fragmentasi).
etskinner
3
OP bertanya bagaimana "menambah / memperluas ruang yang dialokasikan untuk metadata", maka -njawaban Anda "mustahil untuk mengatur nodesize ( opsi)" adalah imho, bukan langsung ke intinya. Karena ketika dia bertanya lebih lanjut "atau [ruang yang dialokasikan untuk metadata] apakah itu secara otomatis diperluas?", Mengisyaratkan bahwa itu bukan nodesize, tetapi ruang yang dialokasikan dia tertarik. Oleh karena itu jawabannya harus "ya". Anda tentu saja benar, mengisyaratkan bahwa -npengaturan memengaruhi ukuran metadata secara tidak langsung, tetapi pertanyaan itu tampaknya lebih mengarah ke memori yang dialokasikan untuk Metadata, bukan ukuran catatan metadata tunggal ....
humanityANDpeace
... katakan misalnya bahwa ada 100G ruang yang tidak digunakan pada perangkat blok pendukung, maka dalam hal memori yang dialokasikan / dialokasikan untuk metadata, akan diperluas secara otomatis (seperti yang diasumsikan oleh OP). Dengan btrfsnamun tidak uncommen, bahwa semua perangkat dukungan / memori, telah dibagikan kepada blockgroups data, yang berarti bahwa selain memori bebas (untuk data itu sendiri), "tidak ada ruang" kesalahan yang dihasilkan. Oleh karena itu, pengguna perlu mencoba beberapa btrfs balance, yang jika masih ada ruang di segmen lain dapat mendistribusikannya untuk menambah ruang metadata yang kurang.
humanityANDpeace