GNU / 리눅스에서 파티션을 옮기는 방법?


14

파티션을 디스크의 시작 부분으로 조금 옮기는 방법은 무엇입니까? Parted는 어떤 이유로 파일 시스템을 원합니다 (왜 그런지 모르겠습니다). 모든 섹터를 왼쪽으로 이동하고 싶습니다 ...

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.   

FS없이 파티션을 사용하고 있습니까? FS를 다른 사람에게 설정 fdisk한 다음 이동할 수 있습니다.
피터

따라서 실제로는 LUKS 컨테이너입니다. 그러나 파티션 이동기가 파일 시스템 내부를 들여다보아야한다고 생각하지 않습니다.
Vi.

gparted비슷한 상황에서 나를 위해 잘했습니다.
palacsint

아마 결국 그들은 이것을 구현했을까요?
Vi.

@Vi. 나는 그러나 KDE 파티션 매니저 수, (더 LUKS는 AFAIK 지원 없음) gparted를 아직이 작업을 수행 할 수 있다고 생각하지 않습니다 및 그것의 환상적 요즘 간단하고, 여기에서 볼
Sam3000

답변:


1

sfdisk스크립트 가능한 fdisk로 의도 된, 일부 버전 이후에는 --move-data옵션이 있습니다. 매뉴얼 페이지의 예 :

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

14

dd 및 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

이제 2 시간 정도 기다립니다. (더 많은 것은 18h처럼 보입니다 ...)

참고 : 이렇게하면 데이터가 앞으로 이동하지 않고 뒤로 이동합니다.

일시 중지 :

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

# kill -9 907

remember 586921398272/512 = 1146330856

재개 :

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

2
생명의 은인! 누구든지 (속도 이유로) 더 큰 bs 값을 사용하려고 했습니까?
David Balažic

다른 bs크기의 경우 값을 적절하게 다시 계산했는지 확인하십시오 .
Vi.

3
왜 안돼 dd conv=notrunc bs=512 iflag=fullblock if=/dev/sdb skip=73402368 seek=0 of=/dev/sdb3? 이 방법은, 그렇지 새로운 sdb3이 내부에서 오래된 sdb3이 심지어 F 시작을 작동합니다
동지

@solsTiCe, 내 명령과 내 명령의 차이점은 무엇입니까?
Vi.

3
그러나 더 큰 bs는 저 혼자 도움이되지 bs=1M iflag=direct oflag=direct않았습니다. SSD에서 40MB / s에서 400MB / s로 이동했습니다. 또한 사용status=progress
Aleksandr Dubinsky

2

당신은 항상 사용할 수 있습니다 dd.

  • liveCD 또는 다른 방법으로 파티션을 마운트하지 않은 상태에서 부팅
  • dd if=/dev/sdc2 of=somefile bs=1M 파일에 파티션 사본을 작성합니다.
  • 파티션을 삭제하기위한 fdisk (또는 원하는 것)
  • fdisk (또는 원하는 것)를 사용하여 원하는 위치에 파티션을 만듭니다.
  • dd of=/dev/sdc2 if=somefile bs=1M 파일에서 내용을 복원합니다.

그 자리에서 어떻게해야합니까? 이 파티션은 내 집에있는 다른 모든 HDD를 합한 것보다 거의 큽니다.
Vi.

같은 것을 할 수 있습니까 dd if=/dev/sdb of=/dev/sdb bs=512 skip=N seek=M?
Vi.

톰 수 있지만 먼저 테스트 할 수 있습니다 . Esp. 파티션에 데이터 백업이없는 경우 또한 백업이있는 경우 더 간단한 솔루션이 있습니다.
Hennes

3
@Vi. 이 정답에 대한 첫 번째 응답은이 "제자리에 놓기"요구 사항이 문제의 어느 곳에도 존재하지 않기 때문에 아무도 투표 할 자격이 없습니다.
zero2cx
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.