Điểm:8

Cách ghi đè lên ổ cứng rất lớn (18TB) bằng dữ liệu ngẫu nhiên bằng lệnh shell trong Linux

lá cờ cn

Tôi muốn ghi đè lên một ổ cứng rất lớn (18TB) bằng các byte ngẫu nhiên, sau đó kiểm tra dữ liệu thông minh để tìm các cung được phân bổ lại hoặc các lỗi khác.

Vì badblocks có một số hạn chế về số khối mà nó sẽ hoạt động trong một lần chạy, nên tôi đã thử "phương pháp cryptsetup" được mô tả trên wiki archlinux:

https://wiki.archlinux.org/title/Badblocks#Finding_bad_sectors

Tôi đã thiết lập một trường thiết bị logic được mã hóa trên toàn bộ ổ đĩa và sau đó sử dụng lệnh "shred" để ghi các số 0 vào thiết bị trường đã mở:

cryptsetup open /dev/device eld --type plain --cipher aes-xts-plain64
băm nhỏ -v -n 0 -z /dev/mapper/eld

Nó tiếp tục in các dòng như

băm nhỏ: /dev/mapper/eld: vượt qua 1/1 (000000)...870MiB/17TiB 0%
băm nhỏ: /dev/mapper/eld: vượt qua 1/1 (000000)...1.7GiB/17TiB 0%
...
băm nhỏ: /dev/mapper/eld: vượt qua 1/1 (000000)...4.1TiB/17TiB 24%

nhưng sau đó nó dừng lại ở 4.1TiB/17TiB được viết. Tôi đã xác minh điều này bằng hexdump, các số 0 không được ghi ngoài địa chỉ byte 0x428249b0000 (4570459340800 ~ 4.156 TiB):

hexdump -C --skip 0x428249a0000 /dev/mapper/eld | cái đầu
428249a0000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
428249b0000 b3 cd d0 34 72 15 f2 2c f6 32 90 fb 69 24 1f ec |...4r..,.2..i$..|
428249b0010 a0 f4 88 a5 56 e7 13 82 94 e5 e0 f5 37 da c3 59 |....V.......7..Y|
428249b0020 9b 55 9f d8 39 a1 41 dc 52 ca 7b 3a 95 f5 59 e2 |.U..9.A.R.{:..Y.|

Nhiều lệnh tiêu chuẩn dường như có vấn đề với đĩa dung lượng cao vì các số liên quan quá lớn đối với kiểu dữ liệu 32 bit.Công cụ đọc/ghi nào trên Linux có thể đọc/ghi ngoài các ranh giới tưởng tượng 2TiB,4TiB này một cách đáng tin cậy?

lá cờ in
4 TB là giới hạn vật lý của MBR. Bạn đã tạo bảng phân vùng MBR thay vì GPT và thiết lập một phân vùng chưa?
lá cờ cn
Đây là một đĩa mới không có bất kỳ phân vùng nào. Tôi không nghĩ MBR hoặc phân vùng có liên quan, tôi muốn ghi đè lên toàn bộ đĩa, vì vậy không có dữ liệu MBR hoặc GPT nào được lưu giữ.
marcelm avatar
lá cờ ng
_"nhưng sau đó nó dừng lại ở 4.1TiB/17TiB được viết."_ - Nó dừng lại như thế nào? Không tiến bộ nữa? `shred` vừa thoát hoàn toàn? Có thông báo lỗi nào không? Có bất cứ điều gì trong các bản ghi hệ thống tại thời điểm đó? Theo dõi câu hỏi của Gerald, điều đó có nghĩa là `/dev/device` trong các lệnh của bạn là một đĩa đầy, không phải là một phân vùng?
lá cờ cn
@marcelm Shred tiếp tục chạy nhưng không còn đầu ra trong một thời gian dài sau dòng 4.1TiB. Không có thông báo lỗi nào trên màn hình hoặc nhật ký hệ thống. Đường dẫn/dev/thiết bị đề cập đến toàn bộ ổ cứng SATA.
Điểm:12
lá cờ us

Chỉnh sửa: Cập nhật theo nhận xét

tôi chỉ đơn giản là sẽ sử dụng

dd if=/dev/urandom of=/dev/sdX bs=1M status=progress iflag=fullblock oflag=fullblock

Đây /dev/sdX là thiết bị cho đĩa cứng.

lá cờ cn
Điều này có vẻ không đáng tin cậy, bởi vì việc đọc từ urandom có ​​thể bị lỗi ở giữa một khối và sau đó dd sẽ ghi ít hơn toàn bộ khối dữ liệu. Có một cách để khắc phục điều này với iflag=fullblock oflag=fullblock, xem https://unix.stackexchange.com/a/121888/90056
lá cờ jm
Mặc dù ghi đè bằng dữ liệu ngẫu nhiên có vẻ hợp lý, nhưng việc sử dụng `/dev/zero` làm đầu vào sẽ hoạt động chống lại bất kỳ kẻ tấn công nào trừ những kẻ tấn công kiên quyết nhất.
Remember Monica avatar
lá cờ ru
Ngoài ra, /dev/urandom rất chậm. Sử dụng thứ gì đó như openssl rc4 để tạo dữ liệu giả ngẫu nhiên có thể gần với tốc độ I/O hơn ở cpu thấp hơn. Hoặc /dev/zero là đủ tốt. Hoặc thực sự là một công cụ như cắt nhỏ.
joshudson avatar
lá cờ cn
@ JánLalinský: Mọi thứ có thay đổi không, bởi vì tôi đã từng sử dụng cái này vào khoảng năm 2000 và tôi chưa bao giờ quan sát thấy một khối nào từ urandom?
peterh avatar
lá cờ pk
@joshudson Tôi, hiếm khi, vâng. Thực sự hiếm khi và luôn có một số trường hợp có vấn đề. Tôi nghĩ đó là do họ gây ra, mặc dù đôi khi tôi cần phải theo dõi dd để hiểu chuyện gì đang xảy ra.
ilkkachu avatar
lá cờ us
@ JánLalinský, điều đó không thành vấn đề: nếu `dd` đọc một khối không hoàn chỉnh, thì nó cũng chỉ ghi một khối không đầy đủ. Tất cả điều đó có nghĩa là các khối được viết sẽ không thẳng hàng sau đó, nhưng hệ điều hành vẫn lưu vào bộ đệm trên `/dev/sdX`. Nó quan trọng hơn với `count=NN`, vì AFAIK các khối không hoàn chỉnh sẽ được tính vào số lượng.
ilkkachu avatar
lá cờ us
Tuy nhiên, `urandom` bị chậm, ít nhất là khi tôi kiểm tra lần cuối. Tôi nghĩ rằng thuật toán nó sử dụng đã được thay đổi (thành ChaCha20 hoặc tương tự?) Tại một thời điểm nào đó, vì vậy có thể bây giờ nó sẽ nhanh hơn. Tôi nghĩ rằng tôi đã sử dụng một cái gì đó như `openssl enc -aes-128-ctr -nosalt -pass file:/dev/urandom ...` tại một số điểm.
Peter Cordes avatar
lá cờ ke
Tại sao một `bs` lớn như vậy? Kích thước khối nhỏ hơn như 128k (khoảng một nửa kích thước bộ đệm L2) có nhiều khả năng chồng lấp I/O tốt hơn với chi phí CPU là `đọc` trên thiết bị `urandom`. Nhưng như nhiều người bình luận đã nói, một nguồn ngẫu nhiên nhanh hơn là một ý tưởng *rất* hay. Trên Skylake i7-6700k của tôi ở tốc độ 3,9 GHz, Linux 5.12.15-arch1-1, `pv /dev/null` báo cáo 55,6 MiB/s. Vì vậy, tùy thuộc vào tốc độ của ổ cứng, khoảng một nửa đến một phần tư tốc độ của đĩa, khiến quá trình ghi 18TiB mất gấp đôi đến gấp 4 lần thời gian.
Peter Cordes avatar
lá cờ ke
Có lẽ bạn muốn sử dụng CSPRNG nếu bạn định viết tính ngẫu nhiên thay vì số không, nhưng nói chung nếu bạn muốn có một nguồn ngẫu nhiên cực nhanh trên máy x86, hãy xem [Cách nhanh nhất để tạo một Tệp văn bản 1 GB chứa các chữ số ngẫu nhiên?](https://unix.stackexchange.com/a/324520) - câu trả lời của tôi có thể dễ dàng thay đổi thành chỉ lưu trữ kết quả xorshift128+ thô từ vectơ SSE2 hoặc AVX2 vào bộ đệm đầu ra, thay vì xử lý thành chữ số ASCII + dấu cách. Một lõi đơn vẫn phải chạy gần với tốc độ memcpy, nhanh hơn nhiều so với bất kỳ ổ cứng nào.
marcelm avatar
lá cờ ng
[`dd` nói chung là vô dụng](https://unix.stackexchange.com/questions/12532/dd-vs-cat-is-dd-still-relevant-these-days) (có, ngoại lệ tồn tại), nó có thể chậm hơn do kích thước khối dưới mức tối ưu (và vâng, `1M` là dưới mức tối ưu) và nó [có khả năng gây nguy hiểm](https://unix.stackexchange.com/questions/17295/when-is-dd-suitable- cho-sao chép-dữ liệu-hoặc-khi-được-đọc-và-ghi-một phần). _Không sử dụng `dd`._ Chỉ cần sử dụng `cat` hoặc `pv` nếu bạn muốn có chỉ báo tiến trình. Những công cụ đó đơn giản hơn, nhanh hơn và không có nhiều cạm bẫy.
Zac67 avatar
lá cờ ru
Yêu cầu dữ liệu ngẫu nhiên để ngăn phục hồi dữ liệu ở cấp độ phương tiện [là chuyện hoang đường](https://security.stackexchange.com/questions/10464/why-is-writing-zeros-or-random-data-over-a-hard -drive-multiple-times-better-th) hoặc ít nhất là lỗi thời nghiêm trọng. Chỉ cần sử dụng `/dev/zero`.
Điểm:1
lá cờ cn

Thay vì cryptsetup + Shrink, tôi đã sử dụng cryptsetup + pv (cat cũng sẽ hoạt động thay vì pv, nhưng nó sẽ không cung cấp bất kỳ thông tin tiến trình nào) và chỉ stdin tới/dev/zero:

cryptsetup open /dev/device eld --type plain --cipher aes-xts-plain64
</dev/zero pv >/dev/mapper/eld

Điều này có lợi thế (so với dd) là không cần chỉ định các đối số tối nghĩa và hiệu suất qua liên kết SATA 3.3 6Gb/s là tốt (>200MiB/s).

pv vẫn không thành công khi kết thúc, nhưng tôi đã kiểm tra rằng nó vẫn ghi đè lên toàn bộ thiết bị logic bằng số không. Điều đó có nghĩa là dm-crypt đã ghi đè toàn bộ ổ cứng bằng các byte giả ngẫu nhiên.

Bây giờ lỗi ổ cứng có thể được kiểm tra theo ít nhất hai cách:

1.Tìm kiếm dữ liệu SMART đã xuống cấp (như các khu vực được phân bổ lại) trong đầu ra của

smartctl -a/dev/thiết bị

2. Đọc dữ liệu từ /dev/mapper/eld và kiểm tra xem tất cả các byte đã đọc có giá trị bằng không. Chạy lệnh cmp từ diffutils để thực hiện so sánh này:

cmp -l -b /dev/zero /dev/mapper/eld

Nó sẽ in địa chỉ byte của lần không khớp đầu tiên và thoát với lỗi hoặc nó sẽ không tìm thấy bất kỳ sự không khớp nào và sau đó nó sẽ in "cmp EOF trên /dev/mapper/eld..." (và vẫn thoát với lỗi).

Không khớp có nghĩa là ổ cứng bị lỗi ghi vĩnh viễn ở vị trí đó hoặc có thể là một lỗi ngẫu nhiên sẽ không lặp lại chính xác ở cùng một vị trí.

Trong lần chạy cmp đầu tiên, tôi thực sự đã gặp lỗi sau 8 giây, điều mà tôi rất ngạc nhiên khi thấy. Dữ liệu SMART không cho thấy bất kỳ sự xuống cấp nào và nhật ký hệ thống không tiết lộ bất kỳ thông báo lỗi nào liên quan đến ổ cứng.

Sau đó, tôi đã thử chạy lại lệnh cmp để kiểm tra xem lỗi bản ghi có phải là thật không, nhưng sự không khớp ở vị trí đó không xảy ra nữa. Đó là một số lỗi ngẫu nhiên trong toàn bộ quá trình đọc + đánh giá. Vì vậy, đừng dựa vào một lần chạy lệnh cmp; trong trường hợp tìm thấy sự không phù hợp, hãy chạy lại. Nếu lỗi biến mất, hãy bỏ qua lỗi không khớp đầu tiên hoặc có thể thử lại một lần nữa. Nếu lỗi vẫn còn, hãy trả lại ổ cứng cho người bán vì nó rất có thể bị lỗi và sự xuống cấp của nó theo thời gian có thể nhanh hơn so với một ổ cứng khỏe mạnh.

.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.