Comment déplacer une partition sous GNU / Linux?

17

Comment déplacer un peu une partition au début du disque? Parted veut un système de fichiers pour une raison quelconque (je ne sais pas pourquoi), je veux juste déplacer tous les secteurs vers la gauche ...

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.
la source
Utilisez-vous les partitions sans FS? Vous pouvez simplement définir le FS pour quiconque avec fdisk, puis les déplacer.
Peter
Il s'agit donc en fait d'un conteneur LUKS. Mais je ne pense pas qu'un déménageur de partition devrait jamais regarder à l'intérieur du système de fichiers.
Vi.
gpartedl'a bien fait pour moi dans une situation similaire.
palacsint
Peut-être qu'en fin de compte, ils ont mis en œuvre cela?
Vi.
1
Parted vesion 3.2 n'a pas l'option "move".
Lenne

Réponses:

4

sfdisk, qui se veut un fdisk scriptable, a depuis certaines versions l' --move-dataoption. Exemple de leur page de manuel :

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

Manière manuelle avec dd et 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

Attend maintenant environ 2h. (plus ressemble plus à 18h ...)

Remarque: cela ne fait que déplacer les données en arrière, pas en avant.

Pause:

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

# kill -9 907

remember 586921398272/512 = 1146330856

Reprise:

dd conv=notrunc bs=512 iflag=fullblock if=/dev/sdb3  skip=$((1146330856+73402368-73385984)) seek=1146330856 of=/dev/sdb3
Vi.
la source
2
Gareautrain! Quelqu'un at-il essayé d'utiliser une valeur bs plus élevée (pour des raisons de vitesse)?
David Balažic
Assurez-vous d'avoir recalculé les valeurs de manière appropriée en cas d'une autre bstaille.
Vi.
3
pourquoi pas dd conv=notrunc bs=512 iflag=fullblock if=/dev/sdb skip=73402368 seek=0 of=/dev/sdb3? de cette façon, cela devrait fonctionner même si le début de l'ancienne sdb3 n'est pas dans la nouvelle sdb3
solsTiCe
@solsTiCe, Quelle est la différence entre votre commande et ma commande?
Vi.
3
Un bs plus gros ne m'a pas aidé tout seul, cependant bs=1M iflag=direct oflag=direct. Passé de 40 Mo / s à 400 Mo / s sur mon SSD. Aussi, utilisezstatus=progress
Aleksandr Dubinsky
3

Vous pouvez toujours utiliser dd.

  • Démarrez à partir d'un liveCD (ou de toute autre manière qui garantit que la partition n'est pas montée)
  • dd if=/dev/sdc2 of=somefile bs=1M pour créer une copie de la partition sur un fichier.
  • fdisk (ou ce que vous voulez) pour supprimer la partition
  • fdisk (ou ce que vous voulez) pour créer la partition à l'endroit souhaité.
  • dd of=/dev/sdc2 if=somefile bs=1M pour restaurer le contenu du fichier.
Hennes
la source
Comment le faire sur place? Cette partition est presque aussi grande que tous les autres disques durs de ma maison réunis.
Vi.
Puis-je faire quelque chose comme ça dd if=/dev/sdb of=/dev/sdb bs=512 skip=N seek=M?
Vi.
Pourrait être en mesure de le tester, mais d'abord . Esp. si vous n'avez aucune sauvegarde des données sur la partition. (Notez également que si vous avez une sauvegarde, il existe des solutions beaucoup plus simples).
Hennes
3
@Vi. Cette première réponse correcte d'une réponse ne mérite aucun vote négatif, car cette exigence de «faire en place» n'existe nulle part dans la question.
zero2cx le