Btrfs sẽ tự động nén các tập tin hiện có khi nén được kích hoạt?


26

Tôi đã chọn btrfs làm định dạng của /hệ thống tệp của mình trong trình cài đặt Ubuntu 12.04 LTS. Sau khi cài đặt hoàn tất, tôi thêm compress=lzovào các tùy chọn gắn kết /etc/fstabvà khởi động lại.

Các tệp hiện có sẽ được tự động nén ngay bây giờ hay tôi phải làm gì đó rõ ràng để khiến điều đó xảy ra?


1
Bạn không cần phải khởi động lại, bạn chỉ có thể sudo mount -o remount /và các tùy chọn fstab mới sẽ có hiệu lực.
sep32

Lưu ý rằng bạn có thể cần sử dụng tùy chọn lực nén hoặc một số tệp sẽ vẫn không bị nén cho dù bạn có làm gì ...
rogerdpack

Một lưu ý liên quan đến lực nén. Nén thông thường có một tính năng ở chỗ nếu nó phát hiện ra rằng nén có rất ít lợi ích, thì nó không bận tâm đến việc tiếp tục nén cho tệp cụ thể đó (do đó tiết kiệm CPU bị lãng phí). Bằng cách sử dụng lực nén, dù sao nó cũng cố nén vô dụng. Các ví dụ hay áp dụng cho các tệp đã được nén (đa phương tiện, tệp zip, v.v.). Nói cách khác, lực nén nói chung là một ý tưởng tồi . ;)
zaTricky

Câu trả lời:


27

Bạn sẽ phải chạy btrfs fi defragmentđể buộc nén lại dữ liệu hiện có. Nếu không, chỉ có dữ liệu mới sẽ được nén.

Từ câu hỏi thường gặp :

... Xem xét việc kết nối lại -o compressvà viết lại các tệp cụ thể tại chỗ hoặc chạy btrfs fi defragmentđể giải nén mọi thứ. Việc này có thể mất một lúc.


btrfs fi defragment -r -clzo / path / to / fs
David Goodwin

2
Còn về autodefragtùy chọn gắn kết thì sao? Điều đó cũng làm cho nó nén các tập tin không nén trước đó khi nó tự động chống phân mảnh?
Lão máu

1
Đảm bảo sử dụng "-r" cờ đệ quy để nén trong các thư mục.
Salami

10

Tôi đã thực hiện những gì Norbert Fabrvian nói, nhưng tôi không nhận thấy bất kỳ sự nén nào trong các tệp hiện có - df -h / trước btrfs fi defragment = 658MB | df -h / sau btrfs fi phân mảnh = 658MB. Tập tin mới là ok. Tìm kiếm một chút mang lại cho tôi trích dẫn này:

Chạy này:

# btrfs filesystem defragment ~/stuff

không chống phân mảnh nội dung của thư mục.

Đây là do thiết kế. btrfs fi defrag hoạt động trên một đối tượng hệ thống tập tin duy nhất được truyền cho> nó. Điều này có nghĩa là các lệnh chống phân mảnh chỉ là siêu dữ liệu được giữ bởi thư mục> đối tượng chứ không phải nội dung của thư mục. Nếu bạn muốn chống phân mảnh nội dung> của thư mục, một cái gì đó như thế này sẽ hữu ích hơn:

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

Sau này, tôi / nó chiếm 656 MB - không có gì lớn, nhưng chắc chắn là có nén.

Nguồn: https://btrfs.wiki.kernel.org/index.php/Probols_FAQ#Defragmenting_a_directory_doesn.27t_work

Hy vọng điều này giúp đỡ.

Xin lỗi tiếng Anh của tôi.


1
1. Khi sử dụng btrfs, không sử dụng hoặc tin tưởng df . 2. Đối với một tỷ lệ tốt hơn nén, sử dụng zlib (tuy nhiên, nó chậm hơn)
Ignis

3
Không nên dòng lệnh của bạn bao gồm defrag -clzohoặc defrag -czlibthay vì chỉ defrag, nếu bạn thực sự muốn nén mọi thứ?
jbo5112

5
Có cờ đệ quy "-r" để bạn có thể thực hiện việc này ngay bây giờ:btrfs fi defrag -r -czlib ~/stuff
Salami

8

Theo tài liệu của Oracle, bạn có thể nén các tệp hiện có trên một hệ thống tệp trực tuyến hiện có bằng cách chống phân mảnh từng tệp trong đó bằng các tùy chọn -c, -clzo hoặc -czlib. LZO được khuyến nghị cho tốc độ.

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

Điều này sử dụng lệnh find để chạy trình chống phân mảnh btrfs trên mọi tệp trong hệ thống tệp gốc (được đưa ra bởi dấu gạch chéo ngay sau lệnh "find" ở đầu). Nếu bạn có các subvolume khác, bạn có thể sử dụng nó một lần nữa với đường dẫn của một subvolume (ví dụ tôi có một tại / nhà) thay vì một dấu gạch chéo.

Bạn sẽ cần quyền root cho việc này, vì vậy hãy thêm sudo lên phía trước nếu bạn cần.

Xem:


3

Theo https://btrfs.wiki.kernel.org/index.php/Mount_options#List_of_options sau các thuật toán nén có sẵn:


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. 

Lưu ý: Bài đăng này là câu trả lời cho câu hỏi bổ sung loại thuật toán nén nào có sẵn được hỏi bên dưới ... vì vậy xin đừng đổ lỗi cho tôi.


2

Theo ArchWiki :

Mẹo: Nén cũng có thể được bật cho mỗi tệp mà không cần sử dụng compresstùy chọn gắn kết; chỉ cần áp dụng chattr +ccho các tập tin. Khi được áp dụng cho các thư mục, nó sẽ khiến các tệp mới được tự động nén khi chúng đến.

Rất đẹp! Chúa phù hộ BTRFS!

Ngoài ra, từ wiki BTRFS :

Tôi có thể buộc nén trên một tệp mà không sử dụng tùy chọn gắn kết nén không?

Vâng. Tiện ích chattrhỗ trợ cài đặt thuộc tính tệp c đánh dấu inode để nén dữ liệu mới ghi.


-9

Nén được bật theo mặc định trong Btrfs, vì vậy trừ khi bạn vô hiệu hóa nó một cách rõ ràng, nó sẽ được nén.


11
Không đúng, bạn phải vượt qua compression="thuật toán nén yêu thích của bạn" trong fstab để kích hoạt nó.
turbo

@turbo Algorigthms nén nào có sẵn?
ζ--

có vẻ như có 2 lần nén hiện được phép (tốt, 3 nếu bạn tính "không"): btrfs.wiki.kernel.org/index.php/ Kẻ
rogerdpack
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.