Od uszkodzonego sektora do „uszkodzonego pliku” - czy można to zrobić dla systemu Linux / ext3, czy mogę to zrobić dla systemu Windows / NTFS?

17

Gdy kontrola SMART na dysku zgłasza uszkodzony sektor, ważne jest, aby móc zidentyfikować plik zawierający uszkodzony sektor i przywrócić go z kopii zapasowych. Poniżej pokazuję, jak to zrobiłem na moim serwerze VMWARE z systemem Linux / ext3 - ale czy ktoś wie, czy można to zrobić dla systemu Windows / NTFS?

Oto jak to zrobiłem dla Linux / ext3: Najpierw poprosiłem dysk o wykonanie skanowania powierzchni sprzętu (poniżej poziomu systemu operacyjnego, z obwodami SMART na dysku):

vserver:~# smartctl -t long /dev/sdc

Spojrzałem na wyniki:

vserver:~# smartctl -a /dev/sdc
...
196 Reallocated_Event_Count 0x0032   100   100   000    Old_age   Always       -       1
197 Current_Pending_Sector  0x0012   100   100   000    Old_age   Always       -       9
...
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Extended offline    Completed: read failure       90%     27679         591363172

Tak więc jeden sektor został już oznaczony jako zły, 9 oznaczono do zastąpienia z obszaru sektora „przejściowego”. Co ważniejsze, pierwszym logicznym adresem bloku (LBA), który jest nieczytelny, był 591363172.

Znalazłem partycję (i przesunięcie w niej), na którą ta liczba „przetłumaczyła” na:

vserver:~# fdisk -lu /dev/sdc
Device Boot      Start         End      Blocks   Id  System
/dev/sdc1           32   976773119   488386544   83  Linux

Partycja rozpoczęła się w sektorze 32. Tak więc zły sektor był ...

vserver:~# bc -l
591363172-32+1
591363141

... z przesunięciem 591363141 sektorów od początku partycji.

Teraz mogłem znaleźć, który plik został „ukryty”:

vserver:~# tune2fs -l /dev/sdc1 | grep Block\ size
Block size:               4096

Rozmiar bloku tego systemu plików EXT3 wynosił 4096 bajtów, więc zły sektor zniszczył ten blok w systemie plików:

vserver:~# bc -l
591363141*512/4096
73920392.62500000000000000000

A numer bloku (73920392) odpowiadał temu plikowi:

vserver:~# debugfs
debugfs 1.41.3 (12-Oct-2008)
debugfs:  open /dev/sdc1
testb 73920392
debugfs:  testb 73920392
Block 73920392 marked in use
debugfs:  icheck 73920392
Block           Inode number
73920392        18472967
debugfs:  ncheck 18472967
Inode           Pathname
18472967        /path/to/filewithbadsector

I przywróciłem ten plik z kopii zapasowych.

Czy istnieje równoważna procedura, którą mogę wykonać dla Windows / NTFS?

ttsiodras
źródło
Do Twojej wiadomości: bieżąca liczba oczekujących 9 oznacza, że ​​istnieje 9 złych sektorów, a nie tylko jeden. Rozszerzony autotest zatrzymuje się tylko przy pierwszym znalezionym. Przed przywróceniem z kopii zapasowej chcesz również poradzić sobie ze złym sektorem, pisząc do niego zera dd. Zmusi to napęd do jego naprawy lub ponownego przydzielenia.
psusi
Tak, masz rację. Po przywróceniu przeprowadziłem kolejną kontrolę SMART i stwierdziłem, że wszystko jest w porządku - więc zapis pliku najwyraźniej napisał ponad 9 + 1 złych sektorów (a obszar przejściowy podał zamienniki). Ale co z Windows? :-)
ttsiodras
Myślę, że twoje obliczenia dla przesunięcia sektora na partycji są niepoprawne. Numery sektorów (inne niż fizyczne, inaczej CHS) są oparte na zerach, ponieważ sektor 32 to sektor partycji 32-32 == 0, a nie 1.
Szokująco nikt jeszcze nie powiedział tego na ponad rok temu pytanie: kiedy zaczynasz widzieć uszkodzone sektory na dysku, oznacza to, że masz tak wiele automatycznych wewnętrznych mapowań bloków dysku, których nie można już zrekompensować. Zamiast przywracania kopii zapasowych na umierający dysk , należy go wymienić i przywrócić na nowy dysk.
voretaq7

Odpowiedzi:

7

Wiem, że masz system NTFS FS i uruchamiasz system Windows na tym systemie. Nie wiem, czy można „uruchomić” działającego Linuksa, aby działał na tym sterowniku, czy nie.

Jeśli możesz uruchomić Linuksa z CD lub USB, możesz użyć ntfsprogs. patrzeć na -

ntfscluster 

ntfsinfo 

Wierzę, że ntfscluster powie ci, jaki plik przechowuje dany klaster. Mam nadzieję, że to poprowadzi cię we właściwym kierunku.

JM Becker
źródło
Znalazłem ten post na forum, który ma opakowanie narzędzia do robienia tego na różnych systemach plików, i używa również ntfscluster. ubuntuforums.org/showthread.php?t=1943721
Lethargy
Tak, funkcja ddrutility: Znajduje pliki związane z uszkodzonymi sektorami, może również użyć pliku z listą sektora, może moglibyśmy użyć „badblocks -nvs” + „ddrutility”
diyism