Puncte:8

Cum să suprascrieți un hard disk foarte mare (18 TB) cu date aleatorii folosind comenzi shell în Linux

drapel cn

Aș dori să suprascriu un hard disk foarte mare (18 TB) cu octeți aleatori, pentru a verifica apoi datele inteligente pentru sectoare realocate sau alte erori.

Deoarece badblocks are unele limitări în ceea ce privește numărul de blocuri cu care va funcționa într-o singură rulare, am încercat „metoda cryptsetup” descrisă pe wiki archlinux:

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

Am configurat un câmp de dispozitiv logic criptat pe întreaga unitate și apoi am folosit comanda „shred” pentru a scrie zerouri pe dispozitivul deschis:

cryptsetup deschide /dev/device eld --type plain --cipher aes-xts-plain64
shred -v -n 0 -z /dev/mapper/eld

A continuat să imprime linii precum

shred: /dev/mapper/eld: trece 1/1 (000000)...870MiB/17TiB 0%
shred: /dev/mapper/eld: trece 1/1 (000000)...1.7GiB/17TiB 0%
...
shred: /dev/mapper/eld: trece 1/1 (000000)...4.1TiB/17TiB 24%

dar apoi s-a oprit la 4.1TiB/17TiB scris. Am verificat acest lucru cu hexdump, zerourile nu au fost scrise dincolo de adresa octetului 0x428249b0000 (4570459340800 ~ 4,156 TiB):

hexdump -C --skip 0x428249a0000 /dev/mapper/eld | cap
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.|

Multe comenzi standard par să aibă probleme cu discurile de mare capacitate, deoarece numerele implicate sunt prea mari pentru tipurile de date pe 32 de biți.Ce instrumente de citire/scriere pe Linux sunt capabile să citească/scrie dincolo de aceste limite imaginare de 2TiB, 4TiB în mod fiabil?

drapel in
4 TB este limita fizică a MBR. Ați creat un tabel de partiții MBR în loc de GPT și ați configurat o singură partiție?
drapel cn
Acesta este un disc nou, fără partiții. Nu cred că MBR sau partițiile sunt relevante, vreau să suprascriu întregul disc, așa că nu ar trebui păstrate date MBR sau GPT.
marcelm avatar
drapel ng
_"dar apoi s-a oprit la 4,1TiB/17TiB scris."_ - Cum s-a oprit? Nu mai progrese? `shred` tocmai a ieșit curat? Vreun mesaj de eroare? Era ceva în jurnalele de sistem la acel moment? Urmând întrebarea lui Gerald, înseamnă asta că `/dev/device` din comenzile tale era un disc plin, nu o partiție?
drapel cn
@marcelm Shred a continuat să ruleze, dar nu a mai ieșit mult timp după linia de 4.1TiB. Niciun mesaj de eroare pe ecran sau syslog. Calea /dev/device se referă la întregul hard disk SATA.
Puncte:12
drapel us

Editare: Actualizat conform comentariului

Aș folosi pur și simplu

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

Aici /dev/sdX este dispozitivul pentru hard disk.

drapel cn
Acest lucru nu pare de încredere, deoarece citirea din urandom poate eșua în mijlocul unui bloc și apoi dd va scrie mai puțin decât blocul complet de date. Există o modalitate de a remedia acest lucru cu iflag=fullblock oflag=fullblock, consultați https://unix.stackexchange.com/a/121888/90056
drapel jm
În timp ce suprascrierea cu date aleatorii pare rezonabilă, utilizarea `/dev/zero` ca intrare ar trebui să funcționeze împotriva oricărui atacator, în afară de cel mai hotărât dintre atacatori.
Remember Monica avatar
drapel ru
De asemenea, /dev/urandom este foarte lent. Folosirea ceva de genul openssl rc4 pentru a genera date pseudoaleatoare este probabil mult mai apropiată de viteza I/O la un procesor mai mic. Sau /dev/zero, care ar trebui să fie suficient de bun. Sau într-adevăr un instrument precum shred.
joshudson avatar
drapel cn
@JánLalinský: S-au schimbat lucrurile, pentru că obișnuiam să-l foloseam în jurul anului 2000 și nu am observat niciodată un bloc parțial din urandom?
peterh avatar
drapel pk
@joshudson Eu, rar, da. Foarte rar și au existat întotdeauna unele circumstanțe problematice. Am crezut că a fost cauzat de ei, deși uneori aveam nevoie să mă strac dd pentru a înțelege ce se întâmplă.
ilkkachu avatar
drapel us
@JánLalinský, nu ar trebui să conteze: dacă `dd` citește un bloc incomplet, scrie și un bloc incomplet. Tot ceea ce înseamnă este că blocurile scrise vor fi nealiniate după aceea, dar oricum sistemul de operare face buffering pe `/dev/sdX`. Contează mai mult cu `count=NN`, deoarece AFAIK blocurile incomplete vor fi incluse în numărare.
ilkkachu avatar
drapel us
`urandom` este/a fost lent, totuși, cel puțin când am testat ultima dată. Cred că algoritmul pe care l-a folosit a fost schimbat (la ChaCha20 sau așa?) la un moment dat, așa că ar putea fi mai rapid acum. Cred că am folosit ceva de genul `openssl enc -aes-128-ctr -nosalt -pass file:/dev/urandom ...` la un moment dat.
Peter Cordes avatar
drapel ke
De ce un `bs` atât de mare? O dimensiune de bloc mai mică, cum ar fi 128k (aproximativ jumătate din dimensiunea cache-ului L2) are mai multe șanse să se suprapună mai bine I/O cu costul CPU de `citire` pe dispozitivul `urandom`. Dar, după cum au spus mai mulți comentatori, o sursă mai rapidă de aleatorie este o idee *foarte* bună. Pe i7-6700k Skylake al meu la 3,9 GHz, Linux 5.12.15-arch1-1, `pv /dev/null` raportează 55,6 MiB/s. Deci, în funcție de viteza HDD, aproximativ jumătate până la un sfert din viteza unui disc, ceea ce face ca procesul de scriere a 18TiB să dureze de două ori până la de 4 ori mai mult.
Peter Cordes avatar
drapel ke
Probabil că ați dori să utilizați un CSPRNG dacă vă veți deranja să scrieți aleatoriu în loc de zerouri, dar, în general, dacă doriți o sursă fulgerător de rapidă de aleatorie pe o mașină x86, consultați [Care este cel mai rapid mod de a genera un Fișier text de 1 GB care conține cifre aleatorii?](https://unix.stackexchange.com/a/324520) - răspunsul meu ar putea fi ușor modificat pentru a stoca doar rezultatele brute xorshift128+ de la vectorii SSE2 sau AVX2 într-un buffer de ieșire, în loc de procesare în cifre ASCII + spații. Un singur nucleu ar trebui să ruleze în continuare aproape de vitezele memcpy, mult mai rapid decât orice HDD.
marcelm avatar
drapel ng
[`dd` este în general inutil](https://unix.stackexchange.com/questions/12532/dd-vs-cat-is-dd-still-relevant-these-days) (da, există excepții de la aceasta), este probabil mai lent din cauza dimensiunilor suboptime ale blocurilor (și da, `1M` este suboptim) și este [potențial periculos](https://unix.stackexchange.com/questions/17295/when-is-dd-suitable- pentru-copiere-date-sau-când-sunt-citire-și-scriere-parțială). _Nu utilizați `dd`._ Folosiți doar `cat` sau `pv` dacă doriți un indicator de progres. Aceste instrumente sunt mult mai simple, mai rapide și nu sunt pline de capcane.
Zac67 avatar
drapel ru
Solicitarea de date aleatorii pentru a preveni recuperarea datelor la nivel media [este un mit](https://security.stackexchange.com/questions/10464/why-is-writing-zeros-or-random-data-over-a-hard -drive-de-multiple-times-better-th) sau cel puțin grav depășit. Folosiți doar `/dev/zero`.
Puncte:1
drapel cn

În loc de cryptsetup + shred, am folosit cryptsetup + pv (și cat ar trebui să funcționeze în loc de pv, dar nu ar oferi informații despre progres) și am indicat stdin către /dev/zero:

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

Acest lucru are avantajul (în comparație cu dd) că nu trebuie specificate argumente obscure și performanța pe o legătură SATA 3.3 6Gb/s este bună (>200MiB/s).

pv încă a eșuat când a fost atins finalul, dar am verificat că totuși a suprascris întregul dispozitiv logic cu zerouri. Ceea ce înseamnă că dm-crypt a suprascris întregul hard disk cu octeți pseudo-aleatori.

Acum erorile de hard disk pot fi verificate în cel puțin două moduri:

1.Se caută date SMART degradate (cum ar fi sectoarele realocate) în rezultatul

smartctl -a /dev/device

2.Citirea datelor din /dev/mapper/eld și verificarea faptului că toți octeții citiți au valoarea zero. Rularea comenzii cmp de la diffutils pentru a face această comparație:

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

Fie va tipări adresa de octeți a primei nepotriviri și va ieși cu eroare, fie nu va găsi nicio nepotrivire și apoi va tipări „cmp EOF pe /dev/mapper/eld...” (și va ieși în continuare cu eroare).

Nepotrivirea înseamnă că fie un hard disk are o eroare permanentă de înregistrare în acea poziție, fie poate fi o eroare aleatorie care nu se va repeta exact în aceeași poziție.

La prima rulare a cmp, într-adevăr, am primit o eroare deja după 8 secunde, ceea ce am fost foarte surprins să văd. Datele SMART nu au arătat nicio degradare, iar syslog nu a dezvăluit niciun mesaj de eroare privind hard disk-ul.

Apoi am încercat să rulez din nou comanda cmp pentru a verifica dacă eroarea de înregistrare este reală, dar nepotrivirea la acea poziție nu a mai apărut. A fost o eroare aleatorie în întregul proces de citire+evaluare. Deci, nu vă bazați pe o singură rulare a comenzii cmp; în cazul în care se găsește o nepotrivire, rulați-l din nou. Dacă eroarea dispare, ignorați prima nepotrivire sau poate încercați din nou. Dacă eroarea persistă, returnați hard disk-ul vânzătorului, deoarece cel mai probabil este defect și degradarea sa în timp poate fi mai rapidă în comparație cu un hard disk sănătos.

.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.