Come spostare una partizione in GNU / Linux?


17

Come spostare un po 'una partizione all'inizio del disco? Parted vuole un filesystem per qualche motivo (non so perché), voglio solo spostare tutti i settori a sinistra ...

r@l:15:32:45:~# parted /dev/sdb
GNU Parted 2.3
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) p                                                                
Model: HGST HTS 541010A9E680 (scsi)
Disk /dev/sdb: 1000GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type     File system  Flags
 1      1049kB  32.2GB  32.2GB  primary  fat32
 2      32.2GB  37.6GB  5360MB  primary
 3      37.6GB  1000GB  963GB   primary

(parted) move 3                                                           
WARNING: you are attempting to use parted to operate on (move) a file system.
parted's file system manipulation code is not as robust as what you'll find in
dedicated, file-system-specific packages like e2fsprogs.  We recommend
you use parted only to manipulate partition tables, whenever possible.
Support for performing most operations on most types of file systems
will be removed in an upcoming release.
Error: Could not detect file system.   

Stai usando le partizioni senza FS? Puoi semplicemente impostare il FS su chiunque abbia fdiske poi spostarlo.
Peter,

Quindi in realtà è un contenitore LUKS. Ma non credo che un partizionatore dovrebbe mai guardare all'interno del filesystem.
Vi.

gpartedfatto bene per me in una situazione simile.
palacsint,

Forse alla fine l'hanno implementato?
Vi.

1
Partes vesion 3.2 non ha "mossa" come opzione.
Lenne,

Risposte:


4

sfdisk, che intende essere un fdisk utilizzabile da script, da qualche versione ha l' --move-dataopzione. Esempio dalla loro pagina man :

echo '+100M,' | sfdisk --move-data /dev/sdc -N 1

15

Modo manuale con dd e fdisk:

# fdisk -l /dev/sdb | grep sdb3
/dev/sdb3        73402368  1953525167   940061400   83  Linux

# fdisk /dev/sdb
Command (m for help): d
Partition number (1-4): 3
Command (m for help): n
Partition number (1-4, default 3): 3
First sector (73385984-1953525167, default 73385984): 
Using default value 73385984
Last sector, +sectors or +size{K,M,G} (73385984-1953525167, default 1953525167): 
Using default value 1953525167
Command (m for help): w
The partition table has been altered!

# fdisk -l /dev/sdb | grep sdb3
/dev/sdb3        73385984  1953525167   940069592   83  Linux

# dd conv=notrunc bs=512 iflag=fullblock if=/dev/sdb3 count=100 skip=$((73402368-73385984)) seek=0 2> /dev/null | file -s -
/dev/stdin: LUKS encrypted file, ver 1 [aes, cbc-essiv:sha256, sha1] UUID: af1c47f0-4ca5-4ea7-a091-065bd263653f

# dd conv=notrunc bs=512 iflag=fullblock if=/dev/sdb3  skip=$((73402368-73385984)) seek=0 of=/dev/sdb3

# file -s /dev/sdb3
/dev/sdb3: sticky LUKS encrypted file, ver 1 [aes, cbc-essiv:sha256, sha1] UUID: af1c47f0-4ca5-4ea7-a091-065bd263653f

Ora aspetto circa 2h. (più sembra più 18h ...)

Nota: questo sposta solo i dati indietro, non in avanti.

Mettere in pausa:

# pidof dd
907
# kill -STOP 907
# cat /proc/907/fdinfo/1
pos:    586921398272
flags:  0100001

# kill -9 907

remember 586921398272/512 = 1146330856

Ripresa:

dd conv=notrunc bs=512 iflag=fullblock if=/dev/sdb3  skip=$((1146330856+73402368-73385984)) seek=1146330856 of=/dev/sdb3

2
Salvavita! Qualcuno ha provato a usare un valore bs maggiore (per motivi di velocità)?
David Balažic,

Assicurati di aver ricalcolato i valori in modo appropriato in caso di altre bsdimensioni.
Vi.

3
perchè no dd conv=notrunc bs=512 iflag=fullblock if=/dev/sdb skip=73402368 seek=0 of=/dev/sdb3? in questo modo, dovrebbe funzionare anche f inizio del vecchio sdb3 non dentro nuovo sdb3
solsTiCe

@solsTiCe, Qual è la differenza tra il tuo comando e il mio comando?
Vi.

3
Un bs più grande non mi ha aiutato da solo, comunque bs=1M iflag=direct oflag=direct. Sono andato da 40 MB / sa 400 MB / s sul mio SSD. Inoltre, usastatus=progress
Aleksandr Dubinsky il

3

Puoi sempre usare dd.

  • Avvio da un liveCD (o qualsiasi altro modo che assicuri che la partizione non sia montata)
  • dd if=/dev/sdc2 of=somefile bs=1M per creare una copia della partizione su un file.
  • fdisk (o qualunque cosa ti piaccia) per eliminare la partizione
  • fdisk (o qualunque cosa ti piaccia) per creare la partizione nella posizione desiderata.
  • dd of=/dev/sdc2 if=somefile bs=1M per ripristinare i contenuti dal file.

Come farlo sul posto? Questa partizione è grande quasi quanto tutti gli altri HDD della mia casa presi insieme.
Vi.

Posso fare qualcosa del genere dd if=/dev/sdb of=/dev/sdb bs=512 skip=N seek=M?
Vi.

Potrebbe essere in grado di tom ma testarlo prima . Esp. se non si dispone di alcun backup dei dati sulla partizione. (Si noti inoltre che se si dispone di un backup, esistono soluzioni molto più semplici).
Hennes,

3
@Vi. Questa prima risposta corretta di una risposta non merita il voto negativo di nessuno perché questo requisito "fallo sul posto" non esiste da nessuna parte nella domanda.
zero2cx,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.