Ostatnia aktualizacja:
Wiedziałem już, co muszę zrobić, aby rozwiązać ten problem; Po prostu nie wiedziałem, jak to zrobić. Miałem nadzieję, że będzie jakieś gotowe narzędzie, które zrobi to automatycznie - ale nie znalazłem żadnego. Akceptuję odpowiedź Rod, ponieważ pomimo tego, że nie rozwiązałem bezpośrednio mojego problemu, daje on bardzo dobre podstawy na temat rozmiaru sektora i dał mi pewność, że tak naprawdę chodziło o wyrównanie partycji i rozwiązanie. Dla tych, którzy mają to samo zagadnienie, przeczytaj je dokładnie i uważnie, łącznie z komentarzami, zanim cokolwiek zrobisz.
Na początku
Miałem komputer i potrzebowałem więcej miejsca. Kupiłem nowy dysk 500 GB i obudowę USB. Wkrótce zauważyłem, że gdybym podzielił dysk na obudowę i przeniósł go do komputera, nie rozpoznałby partycji (i vice versa). Zakładałem, że to problem z obudową i nie martwiłem się o to.
Potem tragedia
Cudowny dzień, mój komputer postanowił już się nie włączać. Okazuje się, że płyta główna (niemarkowa, tylko wydrukowana na niej duża WYKONANA W CHINACH) jest martwa. Używałem go jako serwera plików i ten dysk 500 GB jest teraz pełen danych, których nie mogę stracić. Jestem teraz spłukany i nie stać mnie na nowy komputer, więc moją jedyną nadzieją była „wadliwa” obudowa USB.
Dochodzenie
Uzbrojony w kilka dystrybucji Linuksa, laptopa, VirtualBox i obudowę przeprowadziłem analizę kryminalistyczną tego problemu. dmesg zgłosił, że rozmiar partycji był poza końcem dysku. Przejrzałem więc arkusze danych dysku twardego, oblicziłem liczbę sektorów od zera, ręcznie przetestowałem granice dysku za pomocą dd i wszystko wyglądało OK, dopóki nie uruchomiłem fdisk i powiedział:
Note: Sector size is 4096 (not 512).
Jak skromny z fdisk. Ta „notatka” była źródłem wszystkich problemów. Po dalszych drobiazgach wyciągnięto następujące wnioski:
Obudowa USB nie jest uszkodzona.
Kontroler SATA na martwej płycie głównej był tym, który był co najmniej „dziwny”. Nie zgłosił systemowi operacyjnemu 4096-bajtowych sektorów, więc system operacyjny z radością utworzył MBR przy użyciu 512-bajtowych adresów sektorów.
Teraz, gdy próbuję uzyskać dostęp do partycji, system operacyjny próbuje użyć adresów opartych na 512 bajtach na dysku sektorowym 4096 bajtów i oczywiście to nie zadziała.
Pytanie
W jaki sposób mogę poprawić adresy w MBR, aby były one poprawne dla rozmiaru sektora 4096 bajtów, oprócz ręcznej edycji MBR w edytorze szesnastkowym i
Partycje nie są wyrównane dla sektorów 4096 bajtów. Czy jest jakieś narzędzie do wyrównania ich oprócz kopiowania do i z innego napędu? (Nie mam zapasowych dysków), czy też muszę utworzyć jakieś narzędzie, które „przesuwa” dane na bok, po kawałku? Partycje to ext3.
Dzięki!
Aktualizacja:
Odkryłem, że istnieje sprytny sposób na użycie dd do przesunięcia partycji na miejscu w tym pytaniu: Jak przenieść partycję w GNU / Linux? Ale nie wiem, czy to zadziała na kawałku sektora. Nie mogę tego teraz przetestować, ale zrobię to, gdy będę miał trochę czasu.
Aktualizacja 2:
Udało mi się więc wyrównać partycję za pomocą powyższej metody i ręcznie edytować MBR w edytorze szesnastkowym. Po ponownym podłączeniu dysku twardego partycja wysięgnika jest automatycznie montowana! Nie polecam tego jednak, podczas procesu wystąpiły błędy We / Wy i mogłem wszystko stracić, patrz komentarz do odpowiedzi Rod. W przypadku drugiej partycji nie podejmę ryzyka i użyję starego dysku twardego i wyrównam porcje, kopiując dane, a następnie wklejając je z powrotem w innym miejscu.
źródło
fdisk
do edycji MBR (dowiedziałem się tego później, nie ma potrzeby edytorów szesnastkowych :)) Możesz zmienić punkt początkowy i rozmiar każdego wpisu i przejrzeć zmiany przed zastosowaniem. Więc: zacznijfdisk
, zanotuj bieżącą konfigurację (lub lepiej, wykonaj kopię zapasową MBRdd
), pomnóż adres początkowy i wartości rozmiaru przez 8 i zmień je. Pamiętaj, aby sprawdzić wszystko za pomocą kalkulatora i zrozumieć, co oznaczają te wartości. Zobaczysz, że Rozmiar = Koniec - Początek + 1, ifdisk
pokazuje rozmiar w jednostce 1000 sektorów, więc może być konieczne włączenie trybu eksperta, aby zobaczyć prawdziwą wartość itp.Odpowiedzi:
Problemy wielkości sektorów stają się dość złożone. Do końca 2009 r. Zdecydowana większość dysków twardych używała sektorów 512-bajtowych i tyle. Pod koniec 2009 r. Producenci dysków zaczęli wprowadzać tak zwane dyski Advanced Format (AF), które wykorzystują sektory 4096 bajtów. Te pierwsze dyski AF (i AFAIK, wszystkie dzisiejsze dyski AF) stanowią interfejs do komputera, który pokazuje każdy 4096-bajtowy sektor fizyczny jako podzielony na osiem 512-bajtowych sektorów logicznych . Dzięki tej konwersji starsze narzędzia, w tym wiele systemów BIOS, które zostały zbudowane przy założeniu 512 bajtów, mogą nadal działać. Nie wiem, czy twój dysk używa AF, czy nie, ale w każdym przypadku prawie na pewno używa 512-bajtowego rozmiaru sektora logicznego, co oznacza, że interfejs do systemu operacyjnego powinien używać 512-bajtowych sektorów.
Komplikuje to pewne obudowy dysków USB. Niektóre z tych obudów robią odwrotność tego, co robi AF: biorą osiem sektorów dysku i łączą je w jeden nowy sektor 4096 bajtów. Nie jestem pewien, jakie jest uzasadnienie tego ruchu, ale jedną praktyczną zaletą jest to, że dyski większe niż 2 TB mogą być używane ze starym systemem partycjonowania MBR. Jedną z głównych wad jest to, że dysk podzielony na partycje w jednej z tych obudów nie może być używany bezpośrednio lub w obudowie, która nie wykonuje tego rodzaju tłumaczenia. Podobnie, dysk przygotowany bez tego tłumaczenia nie może być użyty, gdy zostanie przeniesiony do takiej obudowy. Zauważ, że ten problem wykracza daleko poza sam MBR; twój dysk może zidentyfikować pierwszą partycję jako rozpoczynającą się na sektorze (512 bajtów) 2048, ale jeśli twój system operacyjny będzie szukał sektora (4096 bajtów) 2048,znajdź początek tej partycji! Natrafiłeś na ten problem. W związku z tym twoja początkowa myśl, że to wina obudowy USB, jest bliższa znaku niż późniejsza myśl, że Twoja płyta główna popsuła go. Nigdy nie słyszałem o płycie głównej tłumaczącej w ten sposób rozmiar sektora. (Jednak niektóre sprzętowe urządzenia RAID to robią.)
Nie znam sposobu, aby zmusić Linuksa do dostosowania jego koncepcji wielkości sektora, ale jeśli masz wystarczającą ilość miejsca na dysku, pomocne może być skopiowanie dysku niskiego poziomu na inny dysk. Na przykład:
Spowoduje to skopiowanie dysku z
/dev/sdb
(dysku USB; dostosuj w razie potrzeby) do pliku~/image.img
. Następnie możesz użyć następującego skryptu, aby zamontować partycje obrazu:Zapisz skrypt jako, powiedzmy,
mount_image
i użyj go w następujący sposób:Spowoduje to zamontowanie partycji 2
image.img
na/mnt
. Zauważ, że skrypt opiera się na fdisk (gdisk
) GPT , które większość dystrybucji zawiera w pakiecie o nazwiegptfdisk
lubgdisk
.W dłuższej perspektywie lepszym rozwiązaniem jest znalezienie sposobu podłączenia dysku, który nie wykona translacji wielkości sektora. Bezpośrednie połączenie z nową płytą główną powinno załatwić sprawę; lub prawdopodobnie możesz znaleźć zewnętrzną obudowę, która nie wykonuje tłumaczenia. W rzeczywistości niektóre obudowy wykonują tłumaczenie na portach USB, ale nie na portach eSATA, więc jeśli Twoja obudowa ma port eSATA, możesz spróbować tego użyć. Zdaję sobie sprawę, że wszystkie te rozwiązania mogą kosztować pieniądze, których, jak twierdzisz, nie masz, ale może możesz wymienić swoją szafę tłumaczeniową na taką, która nie wykonuje tłumaczenia.
Inną opcją, która przychodzi mi do głowy, jest próba użycia maszyny wirtualnej, takiej jak VirtualBox. Takie narzędzie może przyjmować rozmiar sektora 512-bajtowego podczas uzyskiwania dostępu do urządzenia dyskowego, skutecznie cofając tłumaczenie; lub możesz skopiować zawartość dysku na surowo (jak w
dd if=/dev/sdc of=/dev/sdb
) na maszynie wirtualnej, co może skopiować zawartość z kompresją, dzięki czemu obraz zmieści się na mniejszej ilości miejsca na dysku niż zużywa oryginał.źródło
dd
! O ile nie jesteś bardzo ostrożny i nie rozumiesz rzeczy wyjątkowo dobrze (lub masz wyjątkowe szczęście), istnieje większe prawdopodobieństwo, że coś wyrzucisz niż naprawisz. Przyszło mi do głowy, że możesz dostosować tabelę partycji za pomocąfdisk
: Wykonaj kopię zapasową oryginału, a następnie podziel punkt początkowy każdej partycji przez 8 (i ustaw punkty końcowe na zakończenie tuż przed punktem początkowym następnej partycji). Ma to szansę tylko wtedy, gdy wszystkie wartości początkowe partycji są wielokrotnościami 8.dd
klon podczas połączenia przez USB, i pomyślałem, że klon się nie powiódł. Ale kiedy podłączyłem dysk SSD bezpośrednio do mojej płyty głównej zamiast mojego starego dysku twardego, wszystko działało dobrze!Ten skrypt uogólnił propozycję Rod Smitha, gdy masz nalot lub krypto. Bez gwarancji. Możesz to poprawić! (Zaktualizowany o najnowsze ustalenia dotyczące mdadm)
źródło
Innym, dość prostym sposobem na to jest użycie funkcji ratunkowej parted. Wymaga to jednak utworzenia nowej etykiety dysku, więc wiąże się to z ryzykiem. Parted działa bezpośrednio na dysku, więc wykonaj kopie zapasowe w razie potrzeby przed uruchomieniem parted. Następnie zacznij:
parted powie ci coś wzdłuż tych linii podczas próby odczytu dysku o innym rozmiarze sektora niż ten, z którym utworzono tablicę partycji:
Użyj mklabel, aby utworzyć nowy MBR lub GPT zgodnie z tym, co wcześniej używałeś
Następnie uruchom ratowanie, aby znaleźć starą partycję
Powtórz proces ratowania, jeśli masz więcej partycji. Skończyłeś.
źródło
Miałem ten problem, gdy wyjąłem dysk 4 TB z zewnętrznej obudowy WD My Book. Problemem jest:
Rozwiązanie: Przepisz tabelę partycji do GPT, konwertując wartości na sektory 512-bajtowe.
W moim przypadku partycja rozpoczęła się z przesunięciem o 1 MB i zakończyła (~ 856kB) przed końcem dysku. Jest to dobre, ponieważ pozwoliło to na MBR + GPT (17408 bajtów) przed partycją i zapasowy GPT (16896 bajtów) na końcu dysku.
Zrobiłem zdjęcia obu regionów na wszelki wypadek (używając dd).
Zauważyłem wynik z
fdisk -l /dev/sde
.Użyłem gdisk, aby usunąć pierwszą partycję. Jeśli chcesz, możesz zrobić tak jak ja i zmienić wartość wyrównania na 8 (4096), aby użyć jak największej ilości miejsca. Następnie utworzyłem nową partycję z początkiem 2048 i końcem na końcu dysku. Rozwijam system plików później.
Na szczęście zmiana rozmiaru sektora nie wpływa na system plików, LVM ani LUKS.
źródło