Phân vùng của tôi /dev/sda3
trên ổ SSD không chứa bất kỳ hệ thống tập tin nào, nhưng nó chứa rác. Làm cách nào để thực hiện thao tác TRIM / DISCARD trên toàn bộ phân vùng?
Phân vùng của tôi /dev/sda3
trên ổ SSD không chứa bất kỳ hệ thống tập tin nào, nhưng nó chứa rác. Làm cách nào để thực hiện thao tác TRIM / DISCARD trên toàn bộ phân vùng?
Câu trả lời:
Nếu phiên bản linux-linux của bạn đủ mới (tháng 9 năm 2012), thực sự có một công cụ được xây dựng có mục đích blkdiscard
, đó là cách tốt nhất để làm điều này:
sudo blkdiscard /dev/sda3
Nhưng nếu bạn cần khả năng tương thích với các phiên bản phân phối Linux cũ hơn, hãy đọc tiếp ... Có những trường hợp hdparm
/ wiper.sh
từ chối chạm vào âm lượng vì đó không phải là phân vùng, vì vậy chúng tôi cần một cái gì đó vượt ra ngoài.
Cách được hỗ trợ nhiều nhất mà tôi đã tìm thấy là tận dụng thực tế là khối lượng trao đổi Linux hỗ trợ DISCARD khi chúng được bật. Các wipefs ở cuối là có nên âm lượng không được công nhận là trao đổi sau này.
D=/dev/sda3 ; mkswap $D && swapon -d $D && swapoff $D && wipefs -o 0xff6 $D
Điều này phát hành KHÁM PHÁ trên phần lớn thiết bị.
blkdiscard
. Lệnh nguy hiểm ... :)
WARNING: All data in the discarded region on the device will be lost!
Tôi biết câu hỏi này khá cũ, nhưng ...
Cách đơn giản nhất để làm điều này là chỉ cần tạo một hệ thống tệp ext4 trên phân vùng với phiên bản hợp lý gần đây mkfs.ext4
. Điều đầu tiên công cụ này làm là TRIM toàn bộ phân vùng. Khi bạn đã thực hiện điều đó, bạn có thể ghi đè lên dữ liệu được tạo bằng bất kỳ hệ thống tệp nào bạn muốn.
(Tôi vừa mới thực hiện việc này để tạo phân vùng vfat mới trên thẻ SD chẳng hạn.)
mkfs.ext4 -J size=4 -N1 /dev/my/device
-E lazy_journal_init
dường như dẫn đến việc viết ít hơn một chút so với -J size=4
không. (Dựa trên các thử nghiệm sử dụng tệp thưa thớt thay vì SSD vật lý và du
để xác minh số lượng đã được viết.)
hdparm --trim-sector-Range ở mức thấp, nó được cho là nói chuyện trực tiếp với SSD, do đó không phụ thuộc vào hệ thống tập tin. Những gì wiper.sh làm là sử dụng các chương trình cụ thể của hệ thống tệp để ánh xạ các vùng (hệ thống tệp) miễn phí sang các phần SSD (phần cứng), chúng sử dụng hdparm để cắt xén chúng.
Trả lời câu hỏi, bạn có thể sử dụng hdparm để cắt phân vùng đó, nhưng bạn nên rất cẩn thận . Cách thực hiện là lấy phạm vi khu vực được sử dụng bởi phân vùng, sau đó sử dụng hdparm trên phạm vi khu vực đó. Có lẽ bạn sẽ cần phải vượt qua nhiều phạm vi ngành, vì mỗi phạm vi cho - phạm vi ngành có thể có tối đa 65535 ngành.
fdisk -l có thể cho bạn biết bắt đầu và kích thước của các phân vùng. Hãy chú ý đến các đơn vị được sử dụng bởi fdisk và kích thước cung của ổ SSD của bạn.
Ví dụ (SSD của tôi):
Device Boot Start End Blocks Id System
/dev/sdb1 2048 39070079 19534016 83 Linux
Để loại bỏ không gian trước phân vùng này, tôi có thể cắt các ngành 2047 (kích thước 512 byte, trên ổ SSD của tôi) bắt đầu từ khu vực 1 : hdparm --trim-sector-ranges 1:2047
. Tôi không thể cắt bắt đầu từ khu vực 0 vì đó là MBR (không biết nó hoạt động như thế nào đối với GPT).
Để loại bỏ không gian được sử dụng bởi phân vùng, tôi sẽ làm hdparm --trim-sector-ranges 2048:65535 67583:65535 133118:65535 ...
. Nó có thể được viết kịch bản nhưng tôi sẽ không viết ngay bây giờ.
Ngoài ra, để chắc chắn: Tôi không đảm bảo bất cứ điều gì ở đây, tôi có thể đã tính toán sai các lĩnh vực, thực hiện sao lưu mọi thứ trước khi sử dụng hiệu quả phạm vi --trim-sector.
Lưu ý : nếu bạn cắt không gian "trống" trước phân vùng đầu tiên, như tôi đã trình bày, hãy chắc chắn cài đặt lại GRUB (hoặc bất kỳ trình tải khởi động nào bạn sử dụng) trước khi khởi động lại, vì GRUB lưu trữ một phần của nó trên các cung "không sử dụng" trước phân vùng đầu tiên . Không biết các bộ tải khởi động khác nhưng tôi đoán đó có thể là trường hợp, vì vậy hãy cẩn thận.
wiper.sh
bị lỗi thời bởi fstrim
nó an toàn hơn nhiều, nhưng đối với việc sử dụng cụ thể này sẽ blkdiscard
đánh bại cả hai. Trong năm 2013, không cần phải mạo hiểm phạm vi tính toán bằng tay.
Bạn có thể xem kịch bản đi wiper.sh
kèm với gói hdparm. Nó sử dụng lệnh hdparm --trim-sector-ranges
để TRIM tất cả các cung trống trên một phân vùng, ít nhất là nếu nó chứa một hệ thống tập tin ext3 / 4. Không chắc chắn nếu nó hoạt động với các phân vùng chưa được định dạng, nhưng bạn luôn có thể định dạng tạm thời nó với ext4.
wiper.sh
sẽ cắt gần như tất cả các phân vùng ngoại trừ siêu dữ liệu ext4. Nhưng tôi muốn cắt toàn bộ phân vùng.
blkdiscard
có thể làm việc trên các phân vùng, không chỉ trên toàn bộ ổ đĩa. Tôi đã thử nghiệm thành công trên Fedora 20. Tôi đã kiểm tra các nguồn của blkdiscard
- đó là một chương trình rất đơn giản không biết gì về phân vùng. Tôi giả sử hạt nhân dịch.
Hãy rất cẩn thận, blkdiscard
không có câu hỏi và cho thấy không có thông tin tiến bộ.
Nếu blkdiscard không có sẵn, hãy sử dụng tập lệnh này và đưa đầu ra của nó lên hdparm. Đối số đầu tiên là số lượng các ngành cần cắt, thứ hai là khu vực đầu tiên để cắt.
#! /bin/sh
# List ranges for hdparm --trim-sector-ranges-stdin
: ${MAXSECT=65535}
test $# = 2 || { echo "Usage: trimlist sectors offset" >&2; exit 1; }
sectors=$1
pos=$2
while test $sectors -gt 0; do
if test $sectors -gt $MAXSECT; then
size=$MAXSECT
else
size=$sectors
fi
echo $pos:$size
sectors=$(($sectors-$size))
pos=$(($pos+$size))
done
Đây là một bài viết thú vị nói về việc sử dụng HDDErase để gọi ra tính năng xóa an toàn tích hợp của SSD, thứ sẽ giúp bạn muốn:
blkdiscard --secure
vậy.