Jak przenieść partycję w systemie GNU / Linux?

17

Jak nieco przenieść partycję na początek dysku? Parted chce systemu plików z jakiegoś powodu (nie wiem dlaczego), chcę tylko przesunąć wszystkie sektory w lewo ...

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.
źródło
Czy używasz partycji bez FS? Możesz po prostu ustawić FS dla każdego z, fdiska następnie przenieść je.
Peter
Tak naprawdę jest kontenerem LUKS. Ale nie sądzę, że mechanizm przenoszenia partycji powinien kiedykolwiek zaglądać do systemu plików.
Vi.
gpartedzrobiło to dobrze dla mnie w podobnej sytuacji.
palacsint,
Może w końcu to w końcu wdrożyli?
Vi.
1
Parted vesion 3.2 nie ma opcji „move”.
Lenne

Odpowiedzi:

4

sfdisk, który ma być skryptowalnym dyskiem fdisk, od czasu niektórych wersji ma --move-dataopcję. Przykład ze strony man :

echo '+100M,' | sfdisk --move-data /dev/sdc -N 1
gimpf
źródło
16

Sposób ręczny za pomocą dd i 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

Teraz czekam około 2h. (więcej wygląda bardziej jak 18h ...)

Uwaga: przesuwa to tylko dane do tyłu, a nie do przodu.

Wstrzymywanie:

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

# kill -9 907

remember 586921398272/512 = 1146330856

Wznawianie:

dd conv=notrunc bs=512 iflag=fullblock if=/dev/sdb3  skip=$((1146330856+73402368-73385984)) seek=1146330856 of=/dev/sdb3
Vi.
źródło
2
Ratownik! Czy ktoś próbował użyć większej wartości bs (ze względu na szybkość)?
David Balažic
Upewnij się, że ponownie przeliczyłeś wartości odpowiednio w przypadku innego bsrozmiaru.
Vi.
3
dlaczego nie dd conv=notrunc bs=512 iflag=fullblock if=/dev/sdb skip=73402368 seek=0 of=/dev/sdb3? w ten sposób powinno działać nawet na początku starego sdb3 w nowym sdb3
solsTiCe
@solsTiCe, jaka jest różnica między twoim poleceniem a moim poleceniem?
Vi.
3
Większy bs nie pomógł mi jednak bs=1M iflag=direct oflag=directsam. Z mojego dysku SSD przeszedłem z 40 MB / s do 400 MB / s. Użyj takżestatus=progress
Aleksandr Dubinsky
3

Zawsze możesz użyć dd.

  • Uruchom z płyty LiveCD (lub w inny sposób, który zapewni, że partycja nie zostanie zamontowana)
  • dd if=/dev/sdc2 of=somefile bs=1M aby utworzyć kopię partycji w pliku.
  • fdisk (lub cokolwiek chcesz), aby usunąć partycję
  • fdisk (lub cokolwiek chcesz), aby utworzyć partycję w wybranym miejscu.
  • dd of=/dev/sdc2 if=somefile bs=1M aby przywrócić zawartość z pliku.
Hennes
źródło
Jak to zrobić na miejscu? Ta partycja jest prawie tak duża, jak wszystkie inne dyski twarde w moim domu wzięte razem.
Vi.
Czy mogę zrobić coś takiego dd if=/dev/sdb of=/dev/sdb bs=512 skip=N seek=M?
Vi.
Być może Tom, ale najpierw przetestuj . Esp. jeśli nie masz kopii zapasowej danych na partycji. (Pamiętaj również, że jeśli masz kopię zapasową, istnieją znacznie prostsze rozwiązania).
Hennes
3
@Vi. Ta poprawna, pierwsza odpowiedź na odpowiedź nie zasługuje na nikłe głosowanie, ponieważ ten wymóg „zrób to na miejscu” nie istnieje nigdzie w pytaniu.
zero2cx