Udělal jsem to jednodušším způsobem:
# sfdisk -d /dev/sdb > sdb.bkp
pro jistotu zanechte kopii
# cp sdb.bkp sdb.new
nyní upravte sdb.new změnou POUZE pořadí řádků a čísel oddílů, jako v mém případě:
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
pak jej hodit zpět do tabulky rozdělení disku?
# sfdisk /dev/sdb < sdb.new
Moje posloupnost číslování byla narušena poté, co jsem zmenšil a posunul doprava jediný oddíl (sdb1), abych přidal dva menší oddíly na začátek disku pomocí gparted
.
Pokud poslední příkaz nefunguje, jako v mém případě, změňte jej na:
# sfdisk --no-reread -f /dev/sdb < sdb.new
FYI, to je špatný nápad a můžeš přijít o všechno. Pokud to přesto chcete udělat, zde jsou kroky:
- Ne Udělej to. Pokud to nepomůže, pak:
-
Použijte
sfdisk
tool:Nejprve vytvořte zálohu tabulky oddílů pomocísfdisk -d /dev/sda > sda.out
Pak jděte do toho:
sfdisk /dev/sda -O sda-partition-sectors.save
Uvidíte něco takového
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 :
Nyní vás žádá o zadání nových podrobností pro oddíl 'sda1'. Takže zde musíte zadat čísla sda2. Takže sem vložím '6 1012' a stisknu Enter:
/dev/sda1 :6 1012
/dev/sda1 6 1017 1012 3890128 83 Linux
/dev/sda2 :
Nyní zkontrolujte pokud jsou čísla vytištěná po stisknutí klávesy Enter přesně stejné jako ty vytištěné dříve pro sda2. Pokud je to v pořádku, pokračujte v zadávání nových čísel pro sda2:
/dev/sda2 :0
/dev/sda2 0+ 5 6- 23063+ 83 Linux
/dev/sda3 :
Tentokrát v mém případě stačilo zadat "0" - ale musíte se ujistit, že čísla nejsou zmatená ve vašem.
Dále pokračujte s ostatními oddíly stejným způsobem. Pokud jste se již dostali na konec disku, stačí stisknout Enter. Nakonec znovu zkontrolujte, zda jsou všechna čísla v pořádku a uložte tabulku oddílů (nebo ne). Pokud jste něco pokazili, podívejte se na man sfdisk
a popis možností '-d', '-O' a '-I'.
Všimněte si také, že jakmile provedete šílené změny, možná budete muset spustit „synchronizaci“, aby se oddíly znovu načetly, než se je pokusíte připojit.
Všechna existující řešení vypadají velmi bezpečně, ale ve výsledku poměrně komplikovaně.
Chtěl jsem znovu objednat vše moje oddíly, aby byly v pořádku.
Pokud jste zkušenější, máte nepodstatná nebo zálohovaná data a rádi opravíte případné problémy, můžete zavést systém z Live CD a provést to takto:
sudo fdisk /dev/sdX
pak:
x
pro vstup do expertního režimuf
opravit pořadí jednotek (možnái
v případě potřeby ignorovat všechna varování)r
pro návrat do normálního režimuw
pro zápis změn na disk a ukončení
Další
Nepamatuji si přesné další kroky, protože jsem to udělal pouze jednou a znovu jsem to netestoval, ale protože jsem také přesouval instalaci, připojil jsem také oddíly a zkopíroval všechny soubory:
sudo mkdir /mnt/sda4
sudo mount /dev/sda4 /mnt/sda4
sudo mkdir /mnt/sda5
sudo mount /dev/sda5 /mnt/sda5
date;cp -a /mnt/sda4/* /mnt/sda5;date
A pak získal ID oddílů:
sudo blkid
a aktualizoval následující, aby odrážely nové hodnoty UUID oddílů:
/mnt/sda5/boot/grub/grub.cfg
/mnt/sda5/etc/fstab
Poté jsem aktualizoval GRUB2:
sudo grub-install --root-directory=/mnt/sda5 /dev/sda