Làm cách nào để di chuyển một phân vùng trong GNU / Linux?


17

Làm thế nào để di chuyển một phân vùng đến đầu đĩa một chút? Parted muốn một hệ thống tập tin vì một số lý do (tôi không biết tại sao), tôi muốn chỉ chuyển tất cả các lĩnh vực còn lại ...

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.   

Bạn đang sử dụng các phân vùng mà không có FS? Bạn chỉ có thể đặt FS cho bất kỳ ai fdiskvà sau đó di chuyển chúng.
Peter

Vì vậy, thực sự là một container LUKS. Nhưng tôi không nghĩ rằng một mover phân vùng nên nhìn vào bên trong hệ thống tập tin.
Vi.

gpartedđã làm điều đó tốt cho tôi trong một tình huống mô phỏng.
palacsint

Có lẽ cuối cùng họ đã thực hiện điều này?
Vi.

1
Phần vesion 3.2 không có "di chuyển" như là một tùy chọn.
Lenne

Câu trả lời:



15

Cách thủ công với dd và 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

Bây giờ chờ khoảng 2h. (trông giống như 18h hơn ...)

Lưu ý: điều này chỉ di chuyển dữ liệu trở lại, không chuyển tiếp.

Tạm dừng:

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

# kill -9 907

remember 586921398272/512 = 1146330856

Tiếp tục:

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

2
Phao cứu sinh! Đã có ai thử sử dụng giá trị bs lớn hơn (vì lý do tốc độ) chưa?
David Balažic

Đảm bảo bạn tính toán lại các giá trị một cách thích hợp trong trường hợp bskích thước khác .
Vi.

3
tại sao không dd conv=notrunc bs=512 iflag=fullblock if=/dev/sdb skip=73402368 seek=0 of=/dev/sdb3? Bằng cách này, nên hoạt động ngay cả khi bắt đầu sdb3 cũ không ở bên trong sdb3 mới
solsTiCe

@solsTiCe, sự khác biệt giữa lệnh của bạn và lệnh của tôi là gì?
Vi.

3
Một bs lớn hơn đã không giúp tôi một mình, tuy nhiên, bs=1M iflag=direct oflag=directđã làm. Đã tăng từ 40 MB / s đến 400 MB / s trên ổ SSD của tôi. Ngoài ra, sử dụngstatus=progress
Alexanderr Dubinsky

3

Bạn luôn có thể sử dụng dd.

  • Khởi động từ liveCD (hoặc bất kỳ cách nào khác đảm bảo phân vùng không được gắn kết)
  • dd if=/dev/sdc2 of=somefile bs=1M để tạo một bản sao của phân vùng trên một tập tin.
  • fdisk (hoặc bất cứ điều gì bạn thích) để xóa phân vùng
  • fdisk (hoặc bất cứ điều gì bạn thích) để tạo phân vùng ở nơi bạn muốn.
  • dd of=/dev/sdc2 if=somefile bs=1M để khôi phục nội dung từ tập tin.

Làm thế nào để làm điều đó tại chỗ? Phân vùng này gần như lớn như tất cả các ổ cứng khác trong nhà tôi.
Vi.

Tôi có thể làm một cái gì đó như thế dd if=/dev/sdb of=/dev/sdb bs=512 skip=N seek=Mnào?
Vi.

Có thể tom nhưng kiểm tra nó đầu tiên . Đặc biệt nếu bạn không có bản sao lưu dữ liệu trên phân vùng. (Cũng lưu ý rằng nếu bạn có một bản sao lưu thì có những giải pháp đơn giản hơn).
Hennes

3
@Vi. Điều này đúng, phản hồi đầu tiên của một câu trả lời xứng đáng không bỏ phiếu vì yêu cầu "thực hiện tại chỗ" này không tồn tại trong câu hỏi.
zero2cx
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.