파티션과 파일 시스템을 다른 장치로 마이그레이션하는 방법

파티션과 파일 시스템을 다른 장치로 마이그레이션하는 방법

파티션이 있는 기존 시스템이 있지만 이를 새 장치로 이동하고 싶습니다. 새 장치는 더 작을 수 있으며 기존 장치와 다르게 연결될 수 있습니다. 파티션과 파일 시스템을 이동하고 부팅 시스템을 유지하려면 어떻게 해야 합니까?

답변1

표준 도구 세트를 사용하여 Linux 운영 체제와 함께 드라이브를 복사할 수 있습니다. 배포판에는 몇 가지 주의 사항이 있지만 대부분의 경우 이는 모든 배포판에 적용됩니다. 이 예에서는 HDD에서 HDD보다 작은 SSD로 마이그레이션하겠습니다.

파티션 및 파일 시스템에 대한 정보를 수집합니다.

파티션/블록 장치 레이아웃:

lsblk -o NAME,VENDOR,SERIAL,FSTYPE,MODEL,SIZE,TYPE,MOUNTPOINT

작업할 파티션과 수신 디스크를 결정합니다.

ls /dev/disk/by-id/

lsblk의 정보를 기반으로 기존 파티션 및 수신 디스크에 /dev/disk 경로 세트를 작성합니다. lsblk의 VENDOR는 실제로 버스 이름입니다.

/dev/disk/by-id/[busname]-[model]_[serial]-partX

예를 들어:

/dev/disk/by-id/usb-hdd1000_1234-part1
/dev/disk/by-id/usb-hdd1000_1234-part2
/dev/disk/by-id/usb-hdd1000_1234-part3
/dev/disk/by-id/usb-hdd1000_1234-part4
/dev/disk/by-id/usb-hdd1000_1234-part5

그리고 소스 디스크와 싱크 디스크:

/dev/disk/by-id/usb-hdd1000_1234
/dev/disk/by-id/ata-ssd1000_1234

ls -la를 사용하여 예상되는 장치가 맞는지 확인하세요.

ls -la /dev/disk/by-id/usb-hdd1000_1234
  /dev/disk/by-id/usb-hdd1000_1234 -> ../../sda
ls -la /dev/disk/by-id/ata-ssd1000_1234
  /dev/disk/by-id/ata-ssd1000_1234 -> ../../sdb

이상적인 파티션 레이아웃 결정

예를 들어

Device size: 256GiB
1 EFI     256MiB
2 Linux    20GiB
3 Windows  80GiB
4 Data    139.75GiB
5 Swap     16GiB

특정 시스템에 어떤 유형의 파티션이 필요하거나 있어야 하는지 알아보려면 다른 질문을 참조하세요. 하지만 특히 SSD로 마이그레이션할 때 모든 파티션이 4K 섹터에 맞춰져 있는지 확인하세요. 이렇게 하려면 각 파티션의 크기를 4KiB로 나눌 수 있도록 조정하세요.

새 파티션 생성

fdisk나 parted 등을 사용할 수 있습니다. 지금은 GPT만 소개하겠습니다. 샘플 파티션 레이아웃 사용:

fdisk /dev/disk/by-id/ata-ssd1000_1234

g 새 GPT 파티션 테이블의 경우

n 새 파티션의 경우

기본 파티션 번호를 보려면 Enter를 누르세요.

기본 시작 섹터를 보려면 ENTER를 누르세요.

시작 섹터(+) 전 256MiB(M)의 경우 +256M입니다.

t 1

1

EFI 시스템의 경우 fs 유형입니다.

유형 코드는 다음과 같습니다.

1 EFI System - Needed on EFI systems for booting
4 BIOS Boot - Used for executable data on BIOS mode GPT disks
11 Microsoft Basic Data - Used for most Windows data partitions including NTFS
20 Linux file system - Used for all Linux based file systems except swap. Other types exist for special volume types like RAID (29) and LVM (31).
19 Linux swap - for swap partitions

다른 파티션에 대해서도 이 작업을 반복합니다.

또는 다음과 분리:

parted
> select /dev/disk/by-id/ata-ssd1000_1234
> mktable gpt
> mkpart ESP fat32 1MiB 513MiB
> set 1 boot on
> mkpart primary ext4 513MiB 20737MiB
> mkpart primary ntfs 20737MiB 102657MiB
> mkpart primary ext4 102657MiB 245761MiB
> mkpart primary linux-swap 245761MiB 262145MiB

크기를 조정해야 하는 파일 시스템이 있는지 확인

수신 디스크가 더 작거나 더 작은 파티션이 필요한 경우 기존 파일 시스템을 축소해야 합니다.

파일 시스템 활용도:

dh -h

파일 시스템에 이 작업을 수행할 수 있는 충분한 여유 공간이 있는지 확인하십시오. 파일 시스템이 NTFS인 경우 Windows에서 디스크 관리를 사용하는 것이 좋습니다.

예를 들어 Linux 파티션의 크기를 조정하겠습니다./dev/disk/by-id/usb-hdd1000_1234-part2

e2fsck -f /dev/disk/by-id/usb-hdd1000_1234-part2
resize2fs /dev/disk/by-id/usb-hdd1000_1234-part2 20G

정확한 크기가 확실하지 않은 경우 예상되는 새 파티션 크기보다 훨씬 작은 크기로 크기를 조정하십시오. 파일 시스템은 나중에 정확한 크기로 확장될 수 있습니다.

resize2fs /dev/disk/by-id/usb-hdd1000_1234-part2 19G

또는 대략 500MiB 19 GiB = 19456MiB + 500MiB = 19956MiB

resize2fs /dev/disk/by-id/usb-hdd1000_1234-part2 19956M

파일 시스템을 새 파티션으로 복제

할당된 공간만 복사하여 파일 시스템을 복제합니다.

단일 사용자 모드나 Live CD에서 이 작업을 수행할 수 있습니다.

partclone.fat32 -b -s /dev/disk/by-id/usb-hdd1000_1234-part1 -o /dev/disk/by-id/ata-ssd1000_1234-part1
partclone.ext4 -b -s /dev/disk/by-id/usb-hdd1000_1234-part2 -o /dev/disk/by-id/ata-ssd1000_1234-part2
partclone.ntfs -b -s /dev/disk/by-id/usb-hdd1000_1234-part3 -o /dev/disk/by-id/ata-ssd1000_1234-part3
partclone.ext4 -b -s /dev/disk/by-id/usb-hdd1000_1234-part4 -o /dev/disk/by-id/ata-ssd1000_1234-part4

재교환

mkswap /dev/disk/by-id/usb-hdd1000_1234-part5

/dev/disk/by-id/usb-hdd1000_1234-part2에서 파일 시스템의 크기를 축소하고 이제 /dev/disk/by-id/ata-ssd1000_1234-part2에 복사하므로 확장해야 할 수도 있습니다. . 치수가 정확하게 복사된 경우에는 이 작업이 필요하지 않습니다.

resize2fs /dev/disk/by-id/ata-ssd1000_1234-part2

새 디스크를 사용하여 시스템을 부팅 가능하게 만듭니다.

이제 파일 시스템과 파티션이 UEFI로 이동되었으므로 부트로더와 Linux는 새 파티션을 이해해야 합니다. 또 다른 접근 방식은 UUID 또는 파티션 순서를 재사용하는 것이지만 이 접근 방식에는 조정 및 수정이 필요할 수 있으므로 필요에 따라 업데이트하겠습니다.

리눅스:

배포판에 따라 스왑 파티션이 자동으로 감지되어 사용되거나 fstab에 포함되어야 할 수도 있습니다.

부팅에 필요한 파티션의 fstab을 업데이트합니다. 여기에는 파티션이 포함됩니다.

/
/boot
/boot/efi
/home

이 예에서는 업데이트할 / 및 /boot/efi만 있습니다.

fstab에서 lsblk의 UUID 출력을 사용합니다.

/etc/fstab 편집

최초의 EFI 시스템

lsblk -no UUID /dev/disk/by-id/ata-ssd1000_1234-part1

출력을 사용하여 /boot/efi를 사용하여 fstab의 줄을 변경합니다. 여기서 UUID=는 lsblk의 UUID 출력으로 변경되어야 합니다.

Linux 파일 시스템에도 동일한 작업을 수행합니다. lsblk -UUID 없음 /dev/disk/by-id/ata-ssd1000_1234-part2

UEFI:

또는 Windows에서 부트 로더를 복구해야 하는 포맷된 EFI 시스템 파티션으로 시작할 수도 있습니다. 그렇지 않으면 이 단계를 건너뜁니다.

mkfs.vfat -F32 /dev/disk/by-id/ata-ssd1000_1234-part1

efibootmgr을 사용하여 UEFI에 항목을 수동으로 추가할 수 있지만 GRUB에 내장된 기능을 사용하겠습니다.

애벌레:

이제 GRUB 부트로더만 소개하겠습니다.

mount /dev/disk/by-id/ata-ssd1000_1234-part2 /mnt
mount /dev/disk/by-id/ata-ssd1000_1234-part1 /mnt/boot/efi

grub-install --target=x86_64-efi --boot-directory=/mnt/boot --efi-directory==/mnt/boot/efi --bootloader-id="NewLinux"
grub-mkconfig -o /mnt/boot/grub/grub.cfg

UEFI에 표시하려는 항목으로 bootloader-id 매개변수를 설정합니다. 현재 설정과 다르기를 원합니다.

grub-mkconfig는 실행 중인 시스템 스크립트를 사용하여 항목을 생성합니다. 기존 디스크를 사용하는 경우 여기에는 자체 항목이 포함되고 os-prober는 다른 디스크를 포함합니다. 시작 시 기본값이 아니므로 이를 선택해야 합니다. 라이브 CD를 사용하는 경우 os-prober는 두 설치를 모두 감지합니다. 새 시스템에 들어간 후 grub-mkconfig를 다시 실행하여 새 시스템에서 생성된 항목을 가져옵니다.

마지막으로 파일 시스템을 마운트 해제하고 재부팅합니다.

umount /mnt/*
reboot

osprober 항목의 grub에서 새 디스크를 선택한 다음 새 디스크로 부팅한 후 다시 빌드하십시오.

grub-mkconfig -o /boot/grub/grub.cfg

관련 정보