Có cách nào trong BTRFS để đặt nén vĩnh viễn không?


7

Tôi có một ổ cứng USB.

Tôi muốn gắn kết nó với nén được kích hoạt. Tôi có thể làm trong fstab của hệ thống của mình hoặc thậm chí sử dụng các quy tắc udev. Vấn đề là tôi sẽ không gắn USB HDD vào máy tính của mình. Cho đến nay, tôi thường kích hoạt một thiết bị đầu cuối mỗi lần tôi gắn nó.

Sau đó, tôi phát hiện ra chattr +c. Điều này đang hoạt động rất tốt nhưng tôi muốn sử dụng LZO thay vì ZLIB. Có cách nào cụ thể hơn và xác định thuật toán nén một lần cho tất cả không?

Câu trả lời:


4

btrfs sẽ nén mọi tập tin thay đổi kể từ khi nó được gắn nếu bạn sử dụng:

mount -o compress-force=lzo /dev/btrfsdev /mnt/btrfsmnt

Nếu bạn muốn thấy rằng TẤT CẢ các tệp được nén theo cách này, tôi đã có một đoạn script nhỏ mà tôi đã viết để thực hiện ...

du -ht +$((1024*1024)) "$HOME" |\
    sed -rn 's/^[^/]*(.*)/btrfs fi defrag -fvclzo "\1"/p' |\
        sudo sh -n

Ở trên chỉ hoạt động trên $HOMEthư mục của tôi - nhưng bạn có thể sử dụng nó trên bất cứ thứ gì hoặc mọi thứ bạn muốn. Nó cũng có -ntoán hạng được cung cấp shnhư vậy để bạn có thể tự mình xem những gì shhiện đang notlàm trước khi gỡ bỏ nó để bảo nó làm điều đó.

Dù sao, đầu tiên, nó truy vấn ducác tệp ở human-readableđịnh dạng (có thể là dư thừa ở đây vì chúng tôi sẽ loại bỏ bước đó trong bước tiếp theo) lớn hơn 1MBhoặc$((1024*1024)).

|pipesthông tin của nó để sedmà dải tắt tất cả mọi thứ trước khi dẫn /, "quotes"tên tập tin, xây dựng các btrfs filesystem defragment -verbose -flush-to-disk -compress-lzo \filenamelệnh và tay nó qua một |pipeđến sudo shđể thực thi.

Một lần nữa, nó sẽ không làm bất cứ điều gì miễn sh --no-executelà có hiệu lực.

Tôi nghĩ rằng một số rất gần đây btrfscông cụ userspace xây dựng làm toàn bộ thư mục defragment đệ quy, nhưng nếu như vậy đó là một điều khá mới, vì vậy tôi đã luôn luôn phải làm những thứ như thế này.


Đó là một câu trả lời rất hay. Tuy nhiên đây là những gì tôi đã làm (đây là những gì tôi ngụ ý bởi "Cho đến nay, tôi đã sử dụng để kích hoạt một thiết bị đầu cuối mỗi khi tôi gắn nó."). Tôi muốn biết liệu có cách nào để liên kết các cờ gắn mặc định với FS không. Nếu bạn không có root, không có cái nào trong số này hoạt động cả.

Gắn cờ mặc định? Vâng, bạn chắc chắn có thể sử dụng fstab. Và với btrfs, bạn cũng có thể gắn kết bằng subvolume, do đó bạn có thể liên kết, như bạn nói, một subvolume với các tùy chọn gắn kết cụ thể và với tùy chọn user = mount, bạn có thể cung cấp cho người dùng. Bạn có thể tự hỏi - nhưng làm cách nào để tạo một subvolume trong số các tệp tôi đã có? Nếu bạn tạo một subvolume trống thì cp - hiển thị mọi thứ bạn muốn trong đó sẽ thực hiện công việc.
mikeerv

Ngoài ra, công việc chống phân mảnh ở trên có thể là một công việc định kỳ ...
mikeerv

compress=lzolà đủ, bạn không cần phải nén lại các tệp nhị phân nén như PNG.
Walf

0

Từ những gì tôi đọc được, bạn có thể đặt thuộc compressiontính trên thư mục con để đạt được điều này [0, 1]:

sudo btrfs property set /mnt/your-subvolume compression lzo

Sau khi lấy UUID Btrfs của bạn sudo btrfs filesystem show /mnt/your-subvolume, bạn có thể xác thực rằng tính năng nén LZO hiện được bật với:

cat /sys/fs/btrfs/<UUID>/features/compress_lzo

Nó sẽ trả về 1 nếu được bật.

[0] https://btrfs.wiki.kernel.org/index.php/Compression

[1] https://www.berthon.eu/2016/setting- shared-folder-compression-on-synology-nas-btrfs/

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.