Akankah btrf secara otomatis mengkompres file yang ada saat kompresi diaktifkan?

26

Saya memilih btrfs sebagai format /sistem file saya di installer Ubuntu 12.04 LTS. Setelah instalasi selesai, saya menambahkan compress=lzoopsi mount /etc/fstabdan reboot.

Apakah file yang ada dikompres secara otomatis sekarang, atau haruskah saya secara eksplisit melakukan sesuatu untuk menyebabkan hal itu terjadi?

ændrük
sumber
1
Anda tidak perlu reboot, Anda bisa saja sudo mount -o remount /dan opsi fstab baru akan berlaku.
sep332
NB bahwa Anda mungkin perlu menggunakan opsi kompres-paksa atau beberapa file akan tetap tidak terkompresi apa pun yang Anda lakukan ...
rogerdpack
Catatan tentang gaya kompres. Kompres normal memiliki fitur di mana jika mendeteksi bahwa kompresi memiliki sedikit manfaat atau tidak, itu tidak mengganggu melanjutkan kompresi untuk file tertentu (sehingga menghemat CPU yang terbuang). Dengan menggunakan kompres-kekuatan, itu tetap mencoba kompresi yang tidak berguna. Contoh bagus di mana ini berlaku adalah untuk file yang sudah dikompresi (multimedia, file zip, dll). Dengan kata lain, gaya kompres umumnya merupakan ide yang buruk . ;)
zaTricky

Jawaban:

27

Anda harus berlari btrfs fi defragmentuntuk memaksa kompresi data yang ada. Jika tidak, hanya data baru yang akan dikompres.

Dari FAQ :

... pertimbangkan untuk membuat ulang dengan -o compress, dan menulis ulang file tertentu di tempat, atau jalankan btrfs fi defragmentuntuk mengkompres ulang semuanya. Ini mungkin memakan waktu cukup lama.

Norbert Fabritius
sumber
btrfs fi defragment -r -clzo / path / to / fs
David Goodwin
2
Bagaimana dengan autodefragopsi mount? Apakah itu juga membuatnya kompres file yang sebelumnya tidak terkompresi ketika defrag otomatis?
Geremia
1
Pastikan untuk menggunakan "-r" flag rekursif untuk mengompresi dalam direktori.
Salami
10

Saya telah membuat apa yang dikatakan Norbert Fabritius, tetapi saya tidak melihat adanya kompresi pada file yang ada - df -h / sebelum btrfs fi defragment = 658MB | df -h / setelah btrfs fi defragment = 658MB. File baru ok. Mencari sedikit bawakan saya kutipan ini:

Menjalankan ini:

# btrfs filesystem defragment ~/stuff

tidak men-defrag konten direktori.

Ini dengan desain. btrfs fi defrag beroperasi pada objek sistem file tunggal yang diteruskan ke> itu. Ini berarti bahwa perintah defragment hanya metadata yang dipegang oleh direktori> objek, dan bukan isi direktori. Jika Anda ingin mendefragmen konten> direktori, sesuatu seperti ini akan lebih bermanfaat:

# find -xdev -type f -exec btrfs fi defrag '{}' \;

Setelah ini, saya / itu menempati 656MB - tidak ada yang besar, tetapi tentu saja ada kompresi.

Sumber: https://btrfs.wiki.kernel.org/index.php/Problem_FAQ#Defragmenting_a_directory_doesn.27t_work

Semoga bantuan ini.

Maaf bahasa inggris saya.

J. Neto
sumber
1
1. Saat menggunakan btrfs, jangan gunakan atau percaya df . 2. Untuk rasio kompresi yang lebih baik, gunakan zlib (namun, lebih lambat)
ignis
3
Bukankah seharusnya baris perintah Anda termasuk defrag -clzoatau defrag -czlibbukan hanya defrag, jika Anda ingin benar-benar kompres?
jbo5112
5
Ada bendera rekursif "-r" sehingga Anda bisa melakukan ini sekarang:btrfs fi defrag -r -czlib ~/stuff
Salami
8

Menurut dokumentasi Oracle, Anda dapat mengompres file yang ada pada sistem file online yang ada dengan mendefragmentasi setiap file di dalamnya dengan opsi -c, -clzo, atau -czlib. LZO direkomendasikan untuk kecepatan.

find / -xdev \( -type f -o -type d \) -exec btrfs filesystem defragment -v -clzo -- {} +

Ini menggunakan perintah find untuk menjalankan defragmenter btrf pada setiap file di sistem file root (diberikan oleh slash tepat setelah perintah "find" di awal). Jika Anda memiliki subvolume lain, Anda dapat menggunakannya lagi dengan jalur subvolume (saya punya satu di / home, misalnya) daripada slash tunggal.

Anda akan membutuhkan hak akses root untuk ini, jadi tambahkan sudo ke depan jika perlu.

Lihat:

Geoff
sumber
3

Menurut https://btrfs.wiki.kernel.org/index.php/Mount_options#List_of_options, tersedia algoritma kompresi berikut:


compress,compress-force
Enable compression. Starting with kernel 2.6.38 you can choose the algorithm for compression:

 - compress=zlib - Better compression ratio. It's the default and safe for olders kernels.
 - compress=lzo - Faster compression.
 - compress=no - Disables compression (starting with kernel 3.6). 

compress-force= - Enable compression even for files that don't compress well, like videos and dd images of disks. The options compress-force=zlib and compress-force=lzo works for kernels >2.6.38.

Note that old (before 2012) btrfs-progs versions will probably fail some operations (e.g. fsck) on filesystems with LZO compression. 

Catatan: Posting ini adalah jawaban untuk pertanyaan tambahan apa jenis algoritma kompresi yang tersedia yang ditanyakan di bawah ini ... jadi tolong jangan salahkan saya.

Rostislav Stribrny
sumber
2

Menurut ArchWiki :

Tip: Kompresi juga dapat diaktifkan per file tanpa menggunakan compressopsi mount; cukup mendaftar chattr +cke file. Ketika diterapkan ke direktori, itu akan menyebabkan file baru dikompres secara otomatis ketika mereka datang

Sangat bagus! Tuhan memberkati BTRFS!

Juga, dari wiki BTRFS :

Bisakah saya memaksakan kompresi pada file tanpa menggunakan kompres opsi mount ?

Iya nih. Utilitas chattrmendukung pengaturan atribut file c yang menandai inode untuk mengkompres data yang baru ditulis.

Geremia
sumber
-9

Kompresi diaktifkan secara default di Btrfs, jadi kecuali Anda secara eksplisit menonaktifkannya, itu harus dikompresi.

Diego
sumber
11
Tidak benar, Anda harus melewati compression="algoritma kompresi favorit Anda" di fstab untuk mengaktifkannya.
turbo
@turbo Algoritma kompresi apa yang tersedia?
Reinstate Monica - ζ--
sepertinya ada 2 kompresi saat ini diperbolehkan (well, 3 jika Anda menghitung "tidak ada"): btrfs.wiki.kernel.org/index.php/…
rogerdpack