Wie verschiebe ich eine Partition in GNU / Linux?

14

Wie verschiebe ich eine Partition ein wenig an den Anfang der Festplatte? Parted möchte aus irgendeinem Grund ein Dateisystem (ich weiß nicht warum), ich möchte einfach alle Sektoren nach links verschieben ...

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.
quelle
Verwenden Sie die Partitionen ohne FS? Sie können den FS einfach auf einen beliebigen Wert einstellen fdiskund ihn dann verschieben.
Peter
Also ist eigentlich ein LUKS Container. Ich denke aber nicht, dass ein Partition Mover jemals in das Dateisystem schauen sollte.
Vi.
gpartedIch habe es in einer ähnlichen Situation gut gemacht.
Palacsint
Vielleicht haben sie das am Ende endlich umgesetzt?
Vi.
@Vi. Ich glaube nicht, dass gparted dies noch kann (kein LUKS-Support afaik), aber KDE Partition Manager kann es und es ist heutzutage fantastisch einfach, siehe hier
Sam3000

Antworten:

1

sfdisk, der eine skriptfähige fdisk sein soll, hat seit einiger version die --move-dataoption. Beispiel aus ihrer Manpage :

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

Manueller Weg mit dd und 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

Warten Sie nun ca. 2h. (mehr sieht eher aus wie 18h ...)

Hinweis: Dadurch werden nur Daten zurück und nicht vorwärts verschoben.

Pause:

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

# kill -9 907

remember 586921398272/512 = 1146330856

Wiederaufnahme:

dd conv=notrunc bs=512 iflag=fullblock if=/dev/sdb3  skip=$((1146330856+73402368-73385984)) seek=1146330856 of=/dev/sdb3
Vi.
quelle
2
Lebensretter! Hat jemand versucht, einen größeren bs-Wert zu verwenden (aus Geschwindigkeitsgründen)?
David Balažic
Stellen Sie sicher, dass Sie die Werte bei einer anderen bsGröße entsprechend neu berechnet haben .
Vi.
3
warum nicht dd conv=notrunc bs=512 iflag=fullblock if=/dev/sdb skip=73402368 seek=0 of=/dev/sdb3? auf diese weise sollte es auch beim starten von altem sdb3 funktionieren, nicht in neuem sdb3
solsTiCe 10.06.15
@solsTiCe, Was ist der Unterschied zwischen Ihrem Befehl und meinem Befehl?
Vi.
3
Ein größeres BS hat mir jedoch bs=1M iflag=direct oflag=directnicht weitergeholfen. Ging von 40 MB / s auf 400 MB / s auf meiner SSD. Verwenden Sie auchstatus=progress
Aleksandr Dubinsky
2

Sie können immer verwenden dd.

  • Booten von einer Live-CD (oder auf eine andere Weise, die sicherstellt, dass die Partition nicht gemountet ist)
  • dd if=/dev/sdc2 of=somefile bs=1M um eine Kopie der Partition in einer Datei zu erstellen.
  • fdisk (oder was auch immer Sie möchten), um die Partition zu löschen
  • fdisk (oder was auch immer Sie möchten), um die Partition an Ihrem gewünschten Ort zu erstellen.
  • dd of=/dev/sdc2 if=somefile bs=1M um den Inhalt aus der Datei wiederherzustellen.
Hennes
quelle
Wie mache ich es vor Ort? Diese Partition ist fast so groß wie alle anderen Festplatten in meinem Haus zusammengenommen.
Vi.
Kann ich so etwas machen dd if=/dev/sdb of=/dev/sdb bs=512 skip=N seek=M?
Vi.
Könnte tom aber erst testen können . Esp. wenn Sie keine Sicherung der Daten auf der Partition haben. (Beachten Sie auch, dass es bei einem Backup viel einfachere Lösungen gibt).
Hennes
3
@Vi. Diese richtige, erste Antwort auf eine Antwort verdient keine Ablehnung, da diese Anforderung "Do it in Place" nirgendwo in der Frage besteht.
Zero2CX