¿Cómo mover una partición en GNU / Linux?

17

¿Cómo mover una partición al principio del disco un poco? Parted quiere un sistema de archivos por alguna razón (no sé por qué), solo quiero cambiar todos los sectores a la izquierda ...

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.   
Vi.
fuente
¿Estás usando las particiones sin FS? Puede configurar el FS para cualquier persona con fdisky luego moverlos.
Peter
Por lo tanto, en realidad es un contenedor LUKS. Pero no creo que un motor de partición deba mirar dentro del sistema de archivos.
Vi.
gpartedme fue bien en una situación similar.
palacsint
¿Quizás finalmente al final han implementado esto?
Vi.
1
Vesion dividida 3.2 no tiene "movimiento" como una opción.
Lenne

Respuestas:

4

sfdisk, que pretende ser un fdisk programable, tiene desde alguna versión la --move-dataopción. Ejemplo de su página de manual :

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

Manera manual con dd y 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

Ahora esperando alrededor de 2h. (más se parece más a las 18h ...)

Nota: esto solo mueve datos hacia atrás, no hacia adelante.

Pausa

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

# kill -9 907

remember 586921398272/512 = 1146330856

Reanudando:

dd conv=notrunc bs=512 iflag=fullblock if=/dev/sdb3  skip=$((1146330856+73402368-73385984)) seek=1146330856 of=/dev/sdb3
Vi.
fuente
2
¡Salvador de la vida! ¿Alguien intentó usar un valor bs mayor (por razones de velocidad)?
David Balažic
Asegúrese de recalcular los valores adecuadamente en caso de otro bstamaño.
Vi.
3
¿por qué no dd conv=notrunc bs=512 iflag=fullblock if=/dev/sdb skip=73402368 seek=0 of=/dev/sdb3? de esta manera que, en caso de trabajar aún f comienzo de la edad en sdb3 no en el interior nueva sdb3
solsticio de
@solsTiCe, ¿Cuál es la diferencia entre su comando y mi comando?
Vi.
3
Sin embargo, un bs más grande no me ayudó por sí solo bs=1M iflag=direct oflag=direct. Pasé de 40 MB / sa 400 MB / s en mi SSD. Además, usestatus=progress
Aleksandr Dubinsky el
3

Siempre puedes usar dd.

  • Arrancar desde un liveCD (o cualquier otra forma que asegure que la partición no esté montada)
  • dd if=/dev/sdc2 of=somefile bs=1M para crear una copia de la partición en un archivo.
  • fdisk (o lo que quieras) para eliminar la partición
  • fdisk (o lo que quieras) para crear la partición en el lugar deseado.
  • dd of=/dev/sdc2 if=somefile bs=1M para restaurar el contenido del archivo.
Hennes
fuente
¿Cómo hacerlo en el lugar? Esta partición es casi tan grande como todas las otras unidades de disco duro de mi casa juntas.
Vi.
¿Puedo hacer algo como dd if=/dev/sdb of=/dev/sdb bs=512 skip=N seek=M?
Vi.
Podría ser capaz, pero pruébalo primero . Esp. si no tiene una copia de seguridad de los datos en la partición. (También tenga en cuenta que si tiene una copia de seguridad, entonces hay soluciones más simples).
Hennes
3
@Vi. Esta primera respuesta correcta de una respuesta no merece el voto negativo de nadie porque este requisito de "hacerlo en el lugar" no existe en ninguna parte de la pregunta.
zero2cx