명령줄 도구를 사용하여 파티션을 오른쪽으로 이동

명령줄 도구를 사용하여 파티션을 오른쪽으로 이동

예를 들어 190GB의 파티션이 있고 그 뒤에 100GB의 파티션되지 않은 디스크 여유 공간이 있습니다.

분할되지 않은 여유 공간이 왼쪽에 있도록 이 파티션을 100GB "오른쪽"(더 높은 섹터 번호 쪽으로)으로 이동하고 싶습니다.

이 파티션은 다음과 같은 이유로 임의로 복사할 수 없습니다.

  • 여기에는 보존해야 하는 암호화된 데이터(블록 수준)가 포함되어 있습니다.
  • 파티션의 이전 위치와 새 위치가 겹칩니다.

나는 GParted가 이 문제를 처리할 수 있어야 한다는 것을 알고 있습니다. 하지만 명령줄 도구를 사용하여 직접 수행하고 싶습니다. 알아요sfdisk 무언가가있다다음과 같이 파티션을 100M 오른쪽으로 이동합니다.

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

나는 두 가지를 알고 싶습니다:

  • 유사한(또는 다른) 도구를 사용하여 데이터를 수동으로 이동 하려면 dd어떻게 해야 합니까?나는 파티션의 끝을 시작하기 전에 복사해야 한다고 생각합니다. 마치 거꾸로 읽고 복사하는 것과 같습니다(물론 GPT 파티션 테이블도 편집해야 합니다).
  • 이를 사용하고 싶다면 sfdisk디스크 반대편에 있는 파티션에 올바르게 "접촉"하도록 매우 정확한 섹터 번호를 이동하는 데 어떻게 사용할 수 있습니까? (이렇게 하면 서로 간격 없이 서로 옆에 위치하게 됩니다.)

답변1

원하는 경우 sfdisk매우 정확한 섹터 번호를 이동하여 디스크 반대편에 있는 파티션에 올바르게 "접촉"하도록 하려면 어떻게 해야 합니까? (이렇게 하면 서로 간격 없이 서로 옆에 위치하게 됩니다.)

섹터 수를 입력으로 제공하여 이를 수행할 수 있습니다 sfdisk.

echo '+NUM' | sfdisk --move-data /dev/sdc -N 1

첫 번째 파티션 섹터를 NUM오른쪽으로 이동합니다.
설명서에 설명되어 있듯이

숫자 매개변수는 기본적으로 섹터 번호로 해석됩니다.

NUM뒤에 곱셈 접미사(예: Metc. )가 오는 경우에만 바이트 단위의 크기로 처리 KiB됩니다 .sfdisk+50GiB


섹터 수는 어떻게 알 수 있나요? 매우 간단하며 sfdisk스위치를 통해 보고됩니다 -F.

-F, --list-free [device...]
모든 또는 지정된 장치에서 분할되지 않은 사용 가능한 영역을 나열합니다.

샘플 출력(사용 가능한 영역의 섹터 수를 굵게 표시했습니다):

    시작 및 끝 섹터 크기
114369428 324084628  209715200   100 그램

NUM따라서 첫 번째 명령의 숫자를 사용하십시오.

echo '+209715200' | sfdisk --move-data /dev/sdc -N 1

사이에 간격 없이 첫 번째 파티션을 다음 파티션 옆으로 이동합니다.


기록을 위해 2GB SD 카드에서 실행한 내용은 다음과 같습니다(출력과 관련 없는 부분 제거).
4개의 파티션이 있었고 두 번째 파티션 뒤에 여유 공간이 있도록 세 번째 파티션을 삭제했습니다. 그런 다음 Go를 마지막 파티션 쪽으로 이동합니다. 먼저 기존 파티션을 나열합니다.

sfdisk -l /dev/sdc  

[...]

Device    Boot   Start     End Sectors  Size Id Type
/dev/sdc1         2048 2099199 2097152    1G  c W95 FAT32 (LBA)
/dev/sdc2      2099200 2488319  389120  190M  c W95 FAT32 (LBA)
/dev/sdc4      2693120 3966975 1273856  622M  7 HPFS/NTFS/exFAT

sdc2이동하려는 파티션은 섹터로 끝나 2488319므로 여유 공간은 섹터로 시작됩니다 2488320. 그런 다음 여유 공간 영역을 나열합니다.

sfdisk -F /dev/sdc

Unpartitioned space /dev/sdc: 101,5 MiB, 106430464 bytes, 207872 sectors
[...]

  Start     End Sectors  Size
2488320 2693119  204800  100M
3966976 3970047    3072  1,5M

여유 공간에는 두 가지 영역이 있습니다. 첫 번째 영역이 필요합니다. 다음에서 시작하는 섹터 수... 그런 다음 해당 숫자를 파티션 2 이동의 입력 으로 2488320사용합니다 .204800sfdisk

echo "+204800" | sfdisk /dev/sdc -N 2 --데이터 이동
Checking that no-one is using this disk right now ... OK

[...]

Old situation:

Device    Boot   Start     End Sectors  Size Id Type
/dev/sdc1         2048 2099199 2097152    1G  c W95 FAT32 (LBA)
/dev/sdc2      2099200 2488319  389120  190M  c W95 FAT32 (LBA)
/dev/sdc4      2693120 3966975 1273856  622M  7 HPFS/NTFS/exFAT

New situation:

Device    Boot   Start     End Sectors  Size Id Type
/dev/sdc1         2048 2099199 2097152    1G  c W95 FAT32 (LBA)
/dev/sdc2      2304000 2693119  389120  190M  c W95 FAT32 (LBA)
/dev/sdc4      2693120 3966975 1273856  622M  7 HPFS/NTFS/exFAT

Data move:
  start sector: (from/to) 2099200 / 2304000
  sectors: 389120
  step size: 1048576 bytes

Moved 389120 from 389120 sectors (100%).

The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

New situation:출력 에 따르면 2이제 파티션 끝 섹터는 2693119이고 파티션 4시작 섹터는 입니다 2693120. 즉, 둘 사이에 간격이 없습니다.

관련 정보