Tôi muốn biết cách xóa ổ flash USB qua thiết bị đầu cuối nếu có thể để dữ liệu không thể được phục hồi.
Tôi muốn biết cách xóa ổ flash USB qua thiết bị đầu cuối nếu có thể để dữ liệu không thể được phục hồi.
Câu trả lời:
TL / DR: Đảm bảo bạn có được tên thiết bị phù hợp, đảm bảo nó không được gắn kết và thực hiện nhiều lần ghi đè ngẫu nhiên mà bạn có thể chi trả. Bạn có thể làm theo nó bằng một lệnh xóa được thiết kế cho phần cứng flash, nếu bạn đang ở trên một bản phân phối đủ gần đây. Trong các kiểm tra này, luôn luôn sử dụng ổ đĩa (như / dev / sd h ) chứ không phải tên phân vùng (sẽ là / dev / sd h1 )
# dmesg|grep sdXX
[3600.000001] sd 6:0:0:0: [sdXX] 125106176 512-byte logical blocks: (64.0 GB/59.6 GiB)
# blkid|grep sdXX
/dev/sdXX1: PARTUUID="88a03bb2-ced8-4bb2-9883-0a51b4d460a8"
# df|grep /dev/sdXX
# shred -vzn8 /dev/sdXX
shred: /dev/sdXX: pass 1/9 (random)...
shred: /dev/sdXX: pass 1/9 (random)...46MiB/3.8GiB 1%
...
shred: /dev/sdXX: pass 9/9 (000000)...3.8GiB/3.8GiB 100%
# blkdiscard -s /dev/sdXX
blkdiscard: /dev/sdXX: BLKSECDISCARD ioctl failed: Operation not supported
# blkdiscard /dev/sdXX
blkdiscard: /dev/sdXX: BLKDISCARD ioctl failed: Operation not supported
#
Về lý thuyết, ghi đè bằng 0 với dd
chỉ là tốt. Tuy nhiên, do cách thức bên trong của ổ đĩa flash được tạo, nếu bạn sử dụng một lần ghi đè duy nhất, có thể có một số lớp dữ liệu ẩn đằng sau các khối thực tế vẫn đang lưu trữ thông tin còn sót lại.
Thông thường, một phần của bộ lưu trữ flash bị lỗi và được đánh dấu như vậy trong quá trình sản xuất. Ngoài ra còn có các bit khác có thể đi sai (trở nên không thể thay đổi, không thể hoặc không thể xóa được), những phần này cũng phải được đánh dấu bị lỗi trong suốt cuộc đời. Thông tin này được lưu trữ trong một không gian dành riêng, trên cùng các chip với dữ liệu của bạn. Đây là một trong nhiều lý do khiến ổ USB 4GB không hiển thị dung lượng 2 ^ 32 byte.
Bộ lưu trữ flash cũng được tổ chức bên trong trong các khối lớn hơn, đôi khi lớn hơn nhiều so với các hệ thống tệp làm việc trên ổ đĩa. Kích thước khối hệ thống tệp thông thường là 4KB và các phân đoạn flash có thể bị xóa trong một lần có thể dao động từ 64KB đến thậm chí vài megabyte. Các khối lớn này chỉ có thể bị xóa toàn bộ, điều này đặt lại tất cả các khối về trạng thái đã biết (tất cả 1 hoặc tất cả 0). Sau đó, việc ghi dữ liệu có thể thay đổi bất kỳ bit nào (thay đổi 1s mặc định thành 0 khi cần hoặc thay đổi 0 mặc định thành 1), nhưng chỉ một lần . Để thay đổi bất kỳ bit nào trở lại mặc định, tất cả các phân đoạn cần phải được xóa lại!
Vì vậy, khi bạn muốn thay đổi khối 4KB (hệ thống tệp được yêu cầu thay đổi một ký tự ở giữa tệp), bộ điều khiển flash sẽ cần đọc và đệm tất cả 64KB dữ liệu cũ, xóa tất cả dữ liệu đó và xóa tất cả viết lại nội dung mới. Điều này sẽ rất chậm, xóa các phân đoạn là hoạt động chậm nhất. Ngoài ra, một phân đoạn chỉ có thể bị xóa trong một thời gian giới hạn (hàng chục nghìn là điển hình), vì vậy nếu bạn thực hiện quá nhiều thay đổi cho một tệp, điều đó có thể nhanh chóng làm hỏng ổ đĩa.
Nhưng đây không phải là cách nó được thực hiện. Bộ điều khiển flash thông minh chỉ cần ghi dữ liệu mới 4KB ở nơi khác và ghi chú để chuyển hướng đọc sang 4KB dữ liệu này ở giữa khối cũ. Họ cần thêm không gian, mà chúng ta không thể thấy để lưu trữ thông tin này về các chuyển hướng. Họ cũng cố gắng đảm bảo rằng họ đi qua tất cả các phân đoạn có thể truy cập để lưu trữ dữ liệu, điều này được gọi là cân bằng hao mòn .
Điều này có nghĩa là dữ liệu cũ thường vẫn còn trên ổ đĩa ở đâu đó! Nếu bạn chỉ xóa tất cả các khối có thể truy cập, tất cả các khối ẩn vẫn giữ một phiên bản dữ liệu khá gần đây. Liệu điều này có thể truy cập được đối với kẻ tấn công mà bạn muốn dữ liệu của mình được bảo vệ hay không, là một câu hỏi khác.
Nếu bạn có một bản phân phối đủ gần đây và ổ USB được lập trình để tiết lộ rằng đó là ổ đĩa flash, blkdiscard
có thể sử dụng TRIM
thao tác cơ bản , đó là phân đoạn xóa mà chúng ta đã nói ở trên. Nó cũng có một cờ bổ sung để đảm bảo rằng ngay cả dữ liệu ẩn vô hình cũng bị phần cứng xóa hoàn toàn:
# blkdiscard -s /dev/myusbdevice
-s, --secure Thực hiện loại bỏ an toàn. Loại bỏ an toàn cũng giống như loại bỏ thông thường ngoại trừ tất cả các bản sao của các khối bị loại bỏ có thể được tạo bởi bộ sưu tập rác cũng phải được xóa. Điều này đòi hỏi sự hỗ trợ từ thiết bị.
Nó sẽ không nhất thiết phải làm việc, như tôi đã trình bày ở trên. Nếu bạn nhận được Operation not supported
, nhân của bạn, tiện ích của bạn hoặc chip cổng USB (cho phép bộ điều khiển flash trông giống như một ổ đĩa thông qua USB) không hỗ trợ truyền TRIM
lệnh. (Bộ điều khiển flash vẫn phải có thể tự xóa các phân đoạn). Nếu nó được hỗ trợ bởi nhà cung cấp ổ đĩa của bạn, đây là cách an toàn nhất.
Một cách khác, ít an toàn hơn để đảm bảo rằng bạn cho phép ít dữ liệu cũ lưu lại ở đâu đó là ghi đè lên dữ liệu nhiều lần, với các giá trị ngẫu nhiên, nếu có thể.
Tại sao ngẫu nhiên, bạn hỏi? Chỉ cần tưởng tượng nếu ổ USB được làm quá thông minh và phát hiện ra rằng bạn muốn xóa một khu vực và chỉ cần thực hiện một thay đổi trong một bitmap rằng khu vực này hiện đang miễn phí và sẽ cần xóa sau. Vì điều này có nghĩa là nó có thể tăng tốc độ ghi các số không, vì vậy nó làm cho một ổ đĩa có vẻ hiệu quả hơn, phải không? Cho dù ổ đĩa của bạn đang làm điều đó, khó để nói.
Ở mức cực đoan nhất, ổ đĩa chỉ có thể nhớ được bao nhiêu từ lúc bạn đã xóa và tất cả những gì nó cần lưu trữ là khoảng 4 byte thông tin để làm điều này và không xóa bất cứ thứ gì từ dữ liệu bạn muốn biến mất. Tất cả để nó có thể trông rất nhanh.
Nếu bạn ghi đè dữ liệu bằng các giá trị ngẫu nhiên, không thể đoán trước, những tối ưu hóa này là không thể. Vì vậy, ổ đĩa phải đảm bảo dữ liệu cuối cùng được lưu trữ bên trong các chip flash. Nhưng bạn vẫn không thể loại trừ rằng một số lĩnh vực được sử dụng trước đây vẫn còn ở đó với một số dữ liệu cũ của bạn, nhưng ổ đĩa chỉ không coi trọng việc xóa nó, vì nó không thể truy cập bình thường. Chỉ có TRIM
lệnh thực tế có thể đảm bảo rằng.
Để tự động ghi đè với các giá trị ngẫu nhiên, bạn có thể muốn xem xét sử dụng shred
, như:
# shred -vzn88 /dev/myusbdrive
Các tùy chọn được sử dụng:
Nếu có thể, hãy sử dụng cả hai blkdiscard
và shred
, nếu blkdiscard -s
được ổ đĩa của bạn hỗ trợ, đó là giải pháp tối ưu, nhưng không thể làm gì shred
trước để loại trừ các lỗi phần mềm.
Ồ, và luôn luôn kiểm tra ba lần thiết bị mà bạn đang cố gắng xóa! dmesg có thể giúp xem thiết bị nào được chèn gần đây nhất và cũng đáng để kiểm tra tên thiết bị bạn định xóa ls -al
, ngay cả đối với số nút của thiết bị và blkid
đầu ra để xem phân vùng nào có thể có sẵn mà bạn KHÔNG muốn giải tỏa.
Không bao giờ sử dụng các lệnh này trên ổ đĩa nội bộ mà bạn muốn tiếp tục sử dụng - blkdiscard
sẽ chỉ hoạt động trên các ổ đĩa trạng thái rắn, nhưng không đáng để thử mất dữ liệu!
Có thể có những cách khác để xóa dữ liệu một cách an toàn khi tiến bộ công nghệ.
Một cách khác được đề cập là SECURITY ERASE
lệnh ATA có thể được ban hành thông qua hdparm
các lệnh. Theo kinh nghiệm của tôi, nó không thực sự được hỗ trợ trên các ổ đĩa flash. Nó được thiết kế cho các ổ cứng doanh nghiệp và tính năng này không phải lúc nào cũng được triển khai trong các thiết bị lưu trữ chi phí thấp nhất.
Các TRIM
/ DISCARD
hoạt động là mới hơn nhiều so với SECURITY ERASE
lệnh, và đã được tạo ra để đáp ứng với các tính năng đèn flash, vì vậy nó có cơ hội cao hơn nhiều đang được triển khai, ngay cả trong ổ đĩa USB giá rẻ, nhưng nó vẫn không phổ biến. Nếu bạn muốn xóa thẻ SD / micro SD trong khóa USB và blkdiscard
báo cáo rằng nó không được hỗ trợ, bạn có thể muốn thử một đầu đọc thẻ / thẻ khác và / hoặc thực hiện trong máy có khe cắm SD / MMC trực tiếp .
blkdiscard
có trong Debian Jessie và chỉ trong hai bản phát hành Ubuntu gần đây nhất, nhưng không phải là Ubuntu LTS 14.04. blkdiscard
đã được thêm vào gói util-linux
phiên bản 2.23.
blkdiscard
so sánh với hdparm
giải pháp trong một nhận xét khác của @zhenech (cụ thể là liên kết: ata.wiki.kernel.org/index.php/ATA_Secure_Erase ).
Tôi nhận ra đây không thực sự là một câu trả lời cho câu hỏi của bạn, nhưng cách đơn giản nhất là phá hủy ổ đĩa vật lý (đập nó liên tục bằng búa tạ thường là một mánh khóe, nhưng việc băm nhỏ hoặc thiêu hủy công nghiệp cũng là những lựa chọn). Nếu bạn đủ lo lắng về bảo mật để đảm bảo dữ liệu không thể khôi phục được, giá trị của dữ liệu đó có thể gấp nhiều lần so với chi phí của ổ đĩa và phương pháp vật lý là rẻ và đáng tin cậy.
Hầu như tất cả các chức năng xóa an toàn có sẵn được thiết kế để quay phương tiện từ tính, trong đó máy tính thường có thể xác định vị trí vật lý [1] của các khối được sử dụng cho tệp và ghi trên cùng các khối đó. Chip điều khiển lưu trữ trạng thái rắn trừu tượng vị trí vật lý của dữ liệu từ hệ thống và thích di chuyển nó xung quanh.
Câu hỏi của bạn thực sự phụ thuộc vào người sẽ theo dõi dữ liệu của bạn. Nếu bạn lo lắng về mất mát ngẫu nhiên hoặc trộm cắp thông thường thì một định dạng thông thường sẽ ổn. Nếu bạn lo lắng về việc bị nhắm mục tiêu bởi một người dùng có năng lực kỹ thuật cao, có năng lực với các nguồn lực đáng kể theo ý của họ [2] thì chỉ cần đốt ổ đĩa và chi 10 đô la cho một cái mới.
vâng, có ánh xạ khối logic. Nhưng khối logic A sẽ luôn ánh xạ tới khối vật lý B.
người này sẽ mở ổ đĩa lên, rút chip nhớ ra khỏi thẻ và đọc bộ nhớ flash trực tiếp, bỏ qua bộ điều khiển
Cách đơn giản nhất và nhanh nhất mà tôi biết là ghi số không (0) vào toàn bộ ổ đĩa:
dd if=/dev/zero of=/dev/sdX
nơi /dev/sdX
là nút thiết bị của ổ cứng di động của bạn.
Một số gợi ý một quy trình kỹ lưỡng hơn với nhiều lần lặp và các mẫu khác. Tiện ích cụ thể có sẵn để làm điều này. Gói GNU coreutils chứa shred
lệnh đặc biệt cho mục đích này. Nhiều người cũng sử dụng badblocks -w
, là một phần của gói e2fspross. Trên FreeBSD, shred
tiện ích được gọi gshred
và nên có sẵn ở một trong hai /usr/ports/sysutils/coreutils
hoặc /usr/ports/sysutils/fileutils
cổng.
Điều này sẽ có thể xóa sạch ổ đĩa flash của bạn một cách an toàn nếu bạn có kế hoạch sử dụng lại: http://linux.die.net/man/1/scrub Nếu không thì làm tan nó ...