Xóa không gian không sử dụng với số không (ext3, ext4)


73

Làm thế nào để xóa không gian không sử dụng với số không? (ext3, ext4)

Tôi đang tìm kiếm một cái gì đó thông minh hơn

cat /dev/zero > /mnt/X/big_zero ; sync; rm /mnt/X/big_zero

Giống như FSArchiver đang tìm kiếm "không gian đã sử dụng" và bỏ qua trang web không sử dụng, nhưng đối diện.

Mục đích: Tôi muốn nén hình ảnh phân vùng, vì vậy, việc lấp đầy không gian chưa sử dụng bằng số không được khuyến khích.

Btw. Đối với btrfs: Xóa không gian không sử dụng với số không (btrfs)



1
Hai loại câu trả lời khác nhau là có thể. Bạn đang cố gắng để đạt được điều gì? Hoặc 1) an ninh, bằng cách ngăn cấm một người nào đó để đọc những dữ liệu, hoặc 2) tối ưu hóa nén của toàn bộ phân vùng hoặc [SSD hiệu suất] ( en.wikipedia.org/wiki/Trim_(computing) ?
Totor

Câu trả lời:


77

Một tiện ích như vậy là zerofree.

Từ mô tả của nó:

Zerofree tìm thấy các khối không phân bổ, không phân số trong hệ thống tệp ext2 hoặc ext3 và điền chúng vào các số 0. Điều này hữu ích nếu thiết bị chứa hệ thống tệp này là hình ảnh đĩa. Trong trường hợp này, tùy thuộc vào loại hình ảnh đĩa, một tiện ích thứ cấp có thể giảm kích thước của hình ảnh đĩa sau khi zerofree đã được chạy. Zerofree yêu cầu hệ thống tập tin phải được ngắt kết nối hoặc gắn kết chỉ đọc.

Cách thông thường để đạt được kết quả tương tự (loại bỏ các khối không sử dụng) là chạy "dd" để tạo một tệp có đầy đủ các số 0 chiếm toàn bộ dung lượng trống trên ổ đĩa, sau đó xóa tệp này. Điều này có nhiều nhược điểm, mà zerofree làm giảm bớt:

  • nó chậm
  • nó làm cho hình ảnh đĩa (tạm thời) phát triển đến mức tối đa
  • nó (tạm thời) sử dụng tất cả không gian trống trên đĩa, do đó các hành động ghi đồng thời khác có thể thất bại.

Zerofree đã được viết để chạy từ các hệ thống GNU / Linux được cài đặt dưới dạng các hệ điều hành khách bên trong một máy ảo. Nếu đây không phải là trường hợp của bạn, bạn gần như chắc chắn không cần gói này.

CẬP NHẬT # 1

Mô tả về gói .deb chứa đoạn văn sau đây có nghĩa là điều này cũng sẽ hoạt động tốt với ext4.

Mô tả: không có khối miễn phí nào từ các hệ thống tệp ext2, ext3 và ext4 Zerofree tìm thấy các khối chưa được phân bổ có nội dung giá trị khác không trong hệ thống tệp ext2, ext3 hoặc ext4 và điền chúng vào số 0 ...

Công dụng khác

Một ứng dụng khác tiện ích này là nén hình ảnh đĩa là bản sao lưu của đĩa thật. Một ví dụ điển hình cho trường hợp này là kết xuất thẻ SD trong BeagleBone hoặc Raspberry Pi. Khi không gian trống đã bị xóa, hình ảnh sao lưu có thể được nén hiệu quả hơn.


1
Đây có phải là trang chính thức của công cụ intgat.tigress.co.uk/rmy/uml/index.html ? Bạn có nghĩ rằng nó an toàn để sử dụng với ext4?
Grzegorz Wierzowiecki

2
@GrzegorzWierzowiecki: vâng, đó là trang, nhưng đối với debian và bạn bè thì nó đã có trong repos. Tôi đã sử dụng trên một phân vùng ext4 trên một đĩa ảo để liên tục thu nhỏ hình ảnh tệp đĩa và không có vấn đề gì.
enzotib

1
Điều này không tương đương với ddphương pháp thô trong câu hỏi ban đầu, vì nó không hoạt động trên các hệ thống tệp được gắn.
jlh

Trang zerofree nói về một bản vá cho phép bạn thực hiện "hệ thống tệp được gắn với tùy chọn zerofree" để nó luôn xóa các tệp bị xóa liên tục. Điều này có yêu cầu biên dịch lại kernel không? Có cách nào dễ dàng hơn để thực hiện điều tương tự?
endolith

2
Hãy cẩn thận - Tôi mất ext4 hệ thống tập tin sử dụng zerofreetrên Astralinux (Debian dựa) ...
Hubbitus

33

Tóm tắt các phương thức (như đã đề cập trong câu hỏi này và các nơi khác) để xóa không gian chưa sử dụng trên ext2 / ext3 / ext4:

Không gian không sử dụng

Hệ thống tập tin không được gắn kết

  • Nếu "đĩa" hệ thống tệp của bạn được cung cấp mỏng (ví dụ: SSD hiện đại hỗ trợ TRIM, tệp VM có định dạng hỗ trợ độ thưa, v.v.) và hạt nhân của bạn cho biết thiết bị khối hiểu nó, bạn có thể sử dụng e2fsck -E discard src_fsđể loại bỏ không gian chưa sử dụng (yêu cầu e2fsproks 1.42.2 trở lên).
  • Sử dụng zerofree (ví dụ zerofree src_fs) để ghi rõ các số không trên các khối không sử dụng.
  • Việc sử dụng e2image -rap src_fs dest_fsđể chỉ sao chép các khối đang sử dụng (hệ thống tệp mới phải nằm trên một "đĩa" khác, yêu cầu e2fspross 1.42.9 trở lên).

Hệ thống tập tin được gắn kết

  • Nếu "đĩa" hệ thống tệp của bạn được cung cấp mỏng (ví dụ: SSD hiện đại hỗ trợ TRIM, tệp VM có định dạng hỗ trợ độ thưa, v.v.), kernel của bạn cho biết thiết bị khối hiểu nó và cuối cùng trình điều khiển hệ thống tệp ext hỗ trợ bạn có thể sử dụng fstrim /mnt/fs/để yêu cầu hệ thống tập tin loại bỏ không gian không sử dụng.
  • Sử dụng cat /dev/zero > /mnt/fs/zeros; sync; rm /mnt/fs/zeros( sfilltừ an toàn-xóa sử dụng kỹ thuật này). Phương pháp này không hiệu quả, không được đề xuất bởi Ted Ts'o (tác giả của ext4), có thể không có những điều nhất định và có thể làm chậm fscks trong tương lai .

Có hệ thống tập tin không được đếm sẽ cho kết quả tốt hơn so với việc gắn nó. Loại bỏ có xu hướng là phương pháp nhanh nhất khi rất nhiều không gian được sử dụng trước đó cần phải bằng 0 nhưng sử dụng zerofreesau quá trình loại bỏ đôi khi có thể bằng không thêm một chút (tùy thuộc vào cách loại bỏ được thực hiện trên "đĩa").

Làm cho tập tin hình ảnh nhỏ hơn

Hình ảnh ở định dạng VM chuyên dụng

Bạn sẽ cần sử dụng một công cụ hình ảnh đĩa thích hợp (chẳng hạn như qemu-img convert src_image dst_image) để cho phép không gian trống được lấy lại và cho phép tệp đại diện cho hình ảnh trở nên nhỏ hơn.

Hình ảnh là một tập tin thô

Một trong những kỹ thuật sau đây có thể được sử dụng để làm cho tệp thưa thớt (vì vậy, việc chạy không dừng chiếm không gian):

  • cp --sparse=always src_image dst_image.
  • fallocate -d src_image (yêu cầu produc-linux v2.25 trở lên).

Ngày nay, có thể dễ dàng hơn để sử dụng một công cụ như virt-sparsify để thực hiện các bước này và nhiều hơn trong một lần.

 Nguồn


15

sfilltừ an toàn-xóa có thể làm điều này và một số công việc liên quan khác.

ví dụ

sfill -l -l -z /mnt/X

CẬP NHẬT # 1

Có một cây nguồn dường như được sử dụng bởi dự án ArchLinux trên github có chứa nguồn sfilllà công cụ được bao gồm trong gói Secure-Delete.

Ngoài ra một bản sao của sfilltrang người đàn ông ở đây:


URL đó đã lỗi thời. không biết trang chủ của nó hiện đang ở đâu (hoặc thậm chí nếu nó vẫn còn), nhưng nó được đóng gói cho debian và ubfox. có lẽ các distro khác quá. nếu bạn cần mã nguồn, có thể tìm thấy nó trong kho lưu trữ của debian nếu bạn không thể tìm thấy nó ở bất kỳ nơi nào khác.
cas

URL trang web lỗi thời đã được sửa bây giờ. Có vẻ như "Digipedia" không còn là một điều nữa.
mwfearnley

8

Nếu bạn có e2fspross 1.42.9, thì bạn có thể sử dụng e2imageđể tạo hình ảnh phân vùng mà không có không gian trống ở vị trí đầu tiên, vì vậy bạn có thể bỏ qua bước zeroing.


Tôi không thể (dễ dàng) tìm thấy bất kỳ thông tin trực tuyến nào về các tham số này, nhưng chúng thực sự được đưa ra trong ghi chú phát hành 1.42.9: e2fsprogs.sf.net/e2fsprogs-release.html#1.42.9
mwfearnley

1
Đó là một công cụ có giá trị! Tuy nhiên, câu trả lời của bạn sẽ tốt hơn nếu nó cũng giải thích cách sử dụng nó. Đó là e2image -ar /dev/foo1 | gzip > fs.img.gz, hoặc một số biến thể của chúng. Bao gồm -fđể sử dụng nó trên một fs gắn kết.
marcelm

0

Bạn có thể sử dụng sfill. Đó là một giải pháp tốt hơn cho khối lượng mỏng.


Nếu bạn muốn bình luận về câu trả lời của cas, hãy đợi cho đến khi bạn có đủ danh tiếng để làm điều đó.
Anthon

1
Tôi nghĩ rằng câu trả lời đang đề cập đến manpages.ubfox.com/manpages/lucid/man1/sfill.1.html ... ít nhất là một nỗ lực trả lời. ("Trực tuyến" trong trường hợp này có nghĩa là "với hệ thống tập tin được gắn", không phải "trên web").
derobert

0

nếu bạn không muốn dùng đến các công cụ bổ sung, phương pháp này sẽ nhanh hơn cat /dev/zero > /mnt/fs/zeros:

dd if=/dev/zero of="/mnt/fs/filler" bs=10485760
dd if=/dev/zero of="/mnt/fs/filler1" bs=1
rm /mnt/fs/filler
rm /mnt/fs/filler1

Tại sao điều đó sẽ nhanh hơn cat? (Không, đối số kích thước khối ddkhông giúp đỡ)
marcelm


2
Có, nhưng điều đó không làm cho ddnhanh hơn. Trong thực tế, nó có thể làm cho catnhanh hơn. Kích thước khối chỉ quan trọng để giảm thiểu chi phí cho các cuộc gọi hệ thống và tối ưu hóa việc sử dụng bộ đệm CPU. Với tòa nhà cao tầng, bạn bước vào khu vực thu nhập giảm dần. Bộ nhớ cache bắt đầu bị tổn thương ở trên, giả sử, 1MiB. Và khi hoạt động trên các đĩa thực, dù sao bạn cũng bị ràng buộc I / O và điểm chủ yếu là tranh luận. Hãy thử điểm chuẩn cho chính mình.
marcelm
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.