Zmień numer partycji z sda1 na sda2


20

Mam dysk z dwiema partycjami: sda1 i sda2. Chciałbym zmienić liczbę sda1 na sda2 i sda2 na sda1.

Jest to możliwe, ale nie pamiętam procedury. tzn. moją pierwszą partycją będzie sda2, a drugą sda1, więc muszę określić kolejność ręczną, a nie automatyczną, jak w fdisk -> x -> f.

Jak mogę zmienić zamówienie? Przydatne są również linki do instrukcji lub samouczków.

Dzięki.

Powód: Mam aplikację, która wymaga odczytu danych z sda1, ale dane są w sda2. Zmiana tabeli partycji jest szybszym rozwiązaniem tego problemu. System nie jest krytyczny, ale nie chcę go zatrzymywać zbyt długo.

Aktualizacja : fdisk w wersji OpenBSD zawiera tę funkcjonalność.


1
Ponieważ robienie tego, o co prosisz, nie jest dobrym pomysłem, opisz, dlaczego tego chcesz.
rozcietrzewiacz

Mam kopie zapasowe, nie martw się :)
Rufo El Magufo

Ok, zostałeś ostrzeżony i chcesz zagrać, więc
proszę bardzo

Odpowiedzi:


17

Do Twojej wiadomości, to zły pomysł i możesz wszystko stracić. Jeśli nadal chcesz to zrobić, wykonaj następujące czynności:

  1. Nie rób tego Jeśli to nie pomoże, to:
  2. Użyj sfdisknarzędzia: Najpierw wykonaj kopię zapasową tabeli partycji za pomocą

    sfdisk -d /dev/sda > sda.out
    

    Więc idź po to:

    sfdisk /dev/sda -O sda-partition-sectors.save
    

    Zobaczysz coś takiego

    Checking that no-one is using this disk right now ...
    OK
    
    Disk /dev/sda: 1018 cylinders, 124 heads, 62 sectors/track
    Old situation:
    Units = cylinders of 3936256 bytes, blocks of 1024 bytes, counting from 0
    
       Device Boot Start     End   #cyls    #blocks   Id  System
    /dev/sda1          0+      5       6-     23063+  83  Linux
    /dev/sda2          6    1017    1012    3890128   83  Linux
    /dev/sda3          0       -       0          0    0  Empty
    /dev/sda4          0       -       0          0    0  Empty
    Input in the following format; absent fields get a default value.
    <start> <size> <type [E,S,L,X,hex]> <bootable [-,*]> <c,h,s> <c,h,s>
    Usually you only need to specify <start> and <size> (and perhaps <type>).
    
    /dev/sda1 :
    

Teraz prosi o podanie nowych szczegółów dla partycji „sda1”. Musisz więc podać tutaj numery sda2. Wstawiam tutaj „6 1012” i naciskam Enter:

    /dev/sda1 :6 1012
    /dev/sda1          6    1017    1012    3890128   83  Linux
    /dev/sda2 :

Teraz sprawdź, czy liczby wydrukowane po naciśnięciu Enter są dokładnie takie same jak te wydrukowane wcześniej dla sda2. Jeśli jest w porządku, kontynuuj podawanie nowych numerów dla sda2:

    /dev/sda2 :0
    /dev/sda2          0+      5       6-     23063+  83  Linux
    /dev/sda3 :

Tym razem wystarczyło wpisać „0” w moim przypadku - ale musisz się upewnić, że twoje numery nie są pomieszane.

Następnie przejdź do pozostałych partycji w ten sam sposób. Jeśli już dotarłeś do końca dysku, wystarczy nacisnąć Enter. Na koniec sprawdź ponownie, czy wszystkie liczby są prawidłowe i zapisz tabelę partycji (lub nie). Jeśli coś pomieszałeś, spójrz na man sfdiskopisy opcji „-d”, „-O” i „-I”.

Zwróć też uwagę, że po dokonaniu szalonych zmian może być konieczne uruchomienie synchronizacji, aby partycje zostały ponownie odczytane, zanim spróbujesz je zamontować.


Dziękuję za odpowiedź. Masz rację, to jest przerażające :).
Rufo El Magufo

Cudownie złe. Co się stanie, jeśli liczby nie będą takie same? Zrezygnować i podzielić? (Tak właśnie zrobiłem)
supervacuo

1
@supervacuo Testisk może ci wtedy pomóc. Wyszukaj testdiskpakiet w bazie danych oprogramowania swojej dystrybucji.
rozcietrzewiacz

@ supervacuo Jeśli liczby nie są takie same, nowe partycje nie znajdują się w tym samym miejscu co stare partycje i potencjalnie je uszkodzisz. Jeśli nie zrobisz nic innego na dysku, możesz przywrócić tablicę partycji, którą, mam nadzieję, kopię zapasową przed uruchomieniem i spróbować ponownie. Jeśli nie, to lepiej mieć nadzieję, że gdzieś na konsoli nadal są prawidłowe numery lub że możesz zapamiętać dokładny rozmiar i lokalizację partycji i opracować liczby.
Micheal Johnson

31

Po prostu zrobiłem to w łatwiejszy sposób:

# sfdisk -d /dev/sdb > sdb.bkp

zostaw kopię dla bezpieczeństwa

# cp sdb.bkp sdb.new 

teraz edytuj sdb.new zmieniając TYLKO kolejność wierszy i numery partycji, jak w moim przypadku:

od

# partition table of /dev/sdb
unit: sectors

/dev/sdb1 : start=  1026048, size=975747120, Id=83
/dev/sdb2 : start=     2048, size=   204800, Id=83
/dev/sdb3 : start=   206848, size=   819200, Id= b
/dev/sdb4 : start=        0, size=        0, Id= 0

do

# partition table of /dev/sdb
unit: sectors

/dev/sdb1 : start=     2048, size=   204800, Id=83
/dev/sdb2 : start=   206848, size=   819200, Id= b
/dev/sdb3 : start=  1026048, size=975747120, Id=83
/dev/sdb4 : start=        0, size=        0, Id= 0

następnie wrzucić go z powrotem do tabeli partycji dysku?

# sfdisk /dev/sdb < sdb.new

Moja sekwencja numeracji została zniekształcona po tym, jak zmniejszyłem i przesunąłem w prawo jedyną partycję (sdb1), aby dodać dwie mniejsze partycje na początku dysku za pomocą gparted.

Jeśli ostatnie polecenie nie działa, tak jak w moim przypadku, zmień je na:

# sfdisk --no-reread -f /dev/sdb < sdb.new

To zadziałało dla mnie i nie potrzebowałem drugiego polecenia.
Aaron Franke,

Dla mnie, jak również, dzięki;) ... Uwaga Upewnij wszystkich partycji są odmontowana przed poleceń
intika

3

Trzeba będzie przepisać tabelę partycji dysku, aby odwrócić kolejność, co jest nieco ryzykowne. Na twoim miejscu naprawiłbym problem, który sprawia, że ​​chcesz zamienić kolejność nazw urządzeń i zostawić partycje w spokoju.

Na przykład, jeśli masz skrypt, który musi być uruchomiony na obu komputerach i chcesz, aby uzyskał dostęp do tego samego urządzenia, utwórz link w innym katalogu (nie / dev), który ma taką samą nazwę na obu serwerach, ale linki do / dev / sda1 na jednym i / dev / sda2 na drugim.

Możesz użyć dowolnego edytora partycji ( fdisklub cfdisk) do edycji partycji, ale musisz albo zapisać bieżące ustawienia, albo zrobić zdjęcie ekranu. Usuń dwie partycje, a następnie utwórz je ręcznie, podając wszystkie prawidłowe wartości. Uruchom system z LiveCD, aby to zrobić.


Nic nie mogę zmienić. Mój system to Xen DomU, a problem dotyczy Dom0. Mógłbym odtworzyć kolejność partycji, ale w mojej sytuacji jest to bardziej skomplikowane. Ale i tak chciałbym wiedzieć, jak zmienić kolejność.
Rufo El Magufo

2

Po pierwsze, cała ta sprawa jest ćwiczeniem polegającym na staraniu się jak najlepiej zepsuć, ale tak czy inaczej, oto inne podejście, które możesz wypróbować.

Uwaga: Nie wspomniałeś o tym, z którego systemu startujesz, a to rozwiązanie, i nikt inny w tym momencie, kiedy piszę to, zajmuje się tym, co musisz zrobić, aby LILO lub GRUB działały poprawnie.

/dev/sda1i /dev/sda2są urządzeniami blokowymi (8,1) i (8,2). Możesz spróbować użyć mknodpo prostu zamiany dwóch.

telinit 1
(...)
rm -f /dev/sda{1,2}; mknod /dev/sda1 b 8 2; mknod /dev/sda2 b 8 1
chmod 640 /dev/sda{1,2}; chown root:disk /dev/sda{1,2}
reboot

Pamiętaj tylko, że ta zamiana nastąpi dopiero po /dev/załadowaniu partycji zawierającej podczas rozruchu, więc initrdnadal będą miały te „poprawne”, chyba że je również naprawisz (ćwiczenie dla czytelnika - mkinitrdskopiuje dziwność?) To również nie adresuj konteksty SELinux.


Program ładujący nie stanowi problemu :). Dzięki za rozwiązanie, ale muszę zmienić kolejność w tablicy partycji, a nie w systemie.
Rufo El Magufo

1
To nie zadziała w żadnym systemie, który korzysta z udev, a pomogłoby to tylko, gdyby aplikacja odczytała plik o nazwie /dev/sda(w przeciwieństwie do bezpośredniego odczytu dysku).
Gilles „SO- przestań być zły”

Obie - zgodziły się. Całe pytanie IMHO jest ćwiczeniem w bólu. Nie byłem pewien co do udevrzeczy; najwyraźniej pierwszy system, sshw którym pracowałem, nie miał go.
Aaron D. Marasco

2

Właśnie odkryłem zaskakująco łatwe rozwiązanie tego problemu. Załóżmy, że została tylko jedna partycja o nazwie /dev/sda3. Chcesz, żeby to się nazywało /dev/sda1. Otwórz gdisk, przekonwertuj tablicę partycji na GPT, napisz i wyjdź. Następnie otwórz go ponownie, naciśnij sortuj (spowoduje to zmianę numeru GPT na 1), a następnie przekonwertuj GPT z powrotem na MBR za pomocą opcji eksperckich.


1

- Edycja partycji / dev / sda3 do / dev / sda2 w terminalu jako root -

  1. Tabela partycji kopii zapasowej

    sfdisk -d / dev / sda> sda.bkp

  2. Skopiuj kopię zapasową tablicy partycji do nowej tablicy partycji

    cp sda.bkp sda.new

  3. Edytuj nową tablicę partycji

    gedit sda.new

wprowadź opis zdjęcia tutaj

Zapisz, zamknij

  1. Ponownie zainstaluj nową tablicę partycji

    sfdisk --no-reread -f / dev / sda <sda.new

  2. Restart komputera


Chociaż jest to wykonalne, poleciłbym GParted LiveCD
eyoung100

1
Myślę, że możesz zrobić coś lepszego niż zrzut ekranu edytora tekstu z czcionką inną niż spacja, widocznym punktem wstawiania i widocznymi błędami sprawdzania pisowni.
Micheal Johnson
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.