/boot 파티션을 루트 파티션에 병합하는 방법

/boot 파티션을 루트 파티션에 병합하는 방법

/boot개인 파티션을 삭제하고 루트 파티션에 병합하려고 합니다 /. 내가 찾은https://askubuntu.com/questions/741672/how-do-i-merge-my-boot-partition-to-be-a-part-of-the-partition이미 있지만 그건 도움이 되지 않는 것 같습니다.

상황은 어떻습니까?

# uname -a
Linux c02 6.1.0-12-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.52-1 (2023-09-07) x86_64 GNU/Linux

# fdisk -l /dev/sda
Disk /dev/sda: 4 TiB, 4398046511104 bytes, 8589934592 sectors
Disk model: QEMU HARDDISK
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 1673AA12-2A54-4718-AF1E-58FE670A87E3

Device        Start        End    Sectors  Size Type
/dev/sda1      2048       4095       2048    1M BIOS boot
/dev/sda2      4096    2007039    2002944  978M Linux filesystem
/dev/sda3   2007040   10008575    8001536  3.8G Linux swap
/dev/sda4  10008576 8589932543 8579923968    4T Linux filesystem

다음이 작동하여 머신을 성공적으로 재부팅할 수 있었습니다.

# copy content of boot partition to root
cp -a /boot /boot.bak
umount /boot
rm -rf /boot
mv /boot.bak /boot

# update-grub
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-6.1.0-12-amd64
Found initrd image: /boot/initrd.img-6.1.0-12-amd64
Found linux image: /boot/vmlinuz-6.1.0-10-amd64
Found initrd image: /boot/initrd.img-6.1.0-10-amd64
Warning: os-prober will not be executed to detect other bootable partitions.
Systems on them will not be added to the GRUB boot configuration.
Check GRUB_DISABLE_OS_PROBER documentation entry.
done

그러나 물리적 부팅 파티션을 추가로 제거하면 재부팅이 실패합니다.

# fdisk /dev/sda

Welcome to fdisk (util-linux 2.38.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

This disk is currently in use - repartitioning is probably a bad idea.
It's recommended to umount all file systems, and swapoff all swap
partitions on this disk.


Command (m for help): d
Partition number (1-4, default 4): 2

Partition 2 has been deleted.

Command (m for help): w
The partition table has been altered.
Syncing disks.

이로 인해 grub 오류가 발생합니다.

error: no such partition.
grub rescue>

grub다시 설치하면 apt-get install --reinstall grub-pc다음과 같은 grub 오류가 발생합니다.

error: attempt to read or write outside of disk `hd0`.
grub rescue>

어떻게 되어가나요?

답변1

update-grub실제로는 GRUB만 업데이트됩니다.구성 파일존재하다 /boot/grub/grub.cfg.

GRUB 코어 이미지(주로 BIOS 부팅 파티션 내에 위치)에는 파티션 번호와 경로 이름이 포함되어 있습니다. GRUB는 /boot/grubGRUB 구성 파일과 GRUB 모듈(예 normal.mod: .

/bootGRUB는 Linux 커널이 부팅되기 전에 작업을 완료하므로 파티션 마운트 해제는 GRUB에 아무런 영향을 미치지 않습니다. GRUB 코어 이미지에 인코딩된 정보를 업데이트하지 않았으므로( 이전 파일 시스템 grub-install /dev/sda을 마운트 해제 하고 해당 위치로 이동한 후 다시 실행하여) GRUB는 삭제될 때까지 이전 파티션을 계속 사용합니다 . 프로그램을 실행하기 전에 GRUB 구성을 변경하면 변경 사항이 실제로 적용되지 않는다는 것을 알 수 있습니다./boot/boot.bak/bootupdate-grub

따라서 다음에 해야 할 일은 mv /boot.bak /boot가 아니라 다음과 같습니다 update-grub.

grub-install /dev/sda

달리면 동일한 효과를 효과적으로 얻을 수 있습니다 apt-get install --reinstall grub-pc. 하지만 이제 오류 메시지는 attempt to read or write outside of disk 'hd0'. 이는 GRUB가 BIOS 루틴을 사용하여 디스크에 액세스하고 있으며 분명히 QEMU의 BIOS 에뮬레이션 루틴이 >2TB 디스크를 처리하도록 업데이트되지 않았으므로 2TB 제한에 도달한다는 것을 알려줍니다.

(예, 저는 Debian 12 설치를 분석했습니다 grub-pc. 이와 같은 간단한 설치에서 GRUB 코어 이미지에 포함된 유일한 모듈은 fshelp.mod적절한 파일 시스템 드라이버 모듈(예: ext2.mod)적절한 파티션 테이블 유형 모듈(예: part_msdos.mod또는 part_gpt.mod))입니다. 독립적 이거나 사용 가능한 biosdisk.modBIOS가 있을 것입니다 .ahci.modata.mod기본 설치에서는 이를 사용하지 않습니다.)

불행하게도 루트 파일 시스템의 크기가 약 4TB인 경우 UEFI 모드에서 부팅으로 전환해야 합니다. 보안 부팅을 지원하지 않는 Debian의 QEMU를 사용하여 이 작업을 수행하려면 ovmf패키지를 설치하고 <os>VM의 XML 구성 파일 섹션을 다음과 같이 변경해야 합니다.

<os>
  <type arch='x86_64' machine='pc-q35-5.2'>hvm</type>
  <loader readonly='yes' type='pflash'>/usr/share/OVMF/OVMF_CODE_4M.fd</loader>
  <nvram template='/usr/share/OVMF/OVMF_VARS_4M.fd'>/wherever/you/keep/your/VMs/vmname.nvram.fd</nvram>
  <boot dev='hd'/>
</os>

그럼 넌 할 수 있어

  1. 이전 파티션의 BIOS 부팅 및 공간을 재사용하여 /bootEFI 시스템 파티션을 생성합니다.
  2. /etc/fstab에 설치하려면 한 줄을 추가하세요 /boot/efi.
  3. grub-pc및 을 sum grub-pc-bin으로 바꾸고 ,grub-efi-amd64grub-efi-amd64-bin
  4. 달리기grub-install --target=x86_64-efi --force-extra-removable /dev/sda

UEFI 모드에서 성공적으로 부팅한 후 grub-install /dev/sda다시 실행하여 UEFI NVRAM 부팅 변수가 올바르게 설정되었는지 확인하세요. 그런 다음 efibootmgr실행 중인 운영 체제 내에서 표준화된 방식으로 부팅 설정을 설치하고 관리하는 방법을 알아보세요 .

런타임이 아직 UEFI 모드에서 실행되고 있지 않은 경우 UEFI GRUB의 두 번째 복사본이 grub-install --target=x86_64-efi이동식 미디어/대체 위치에 설치됩니다 .--force-extra-removable/boot/efi/EFI/boot/bootx64.efi

보안 부팅도 필요한 경우 NVRAM 템플릿을 OVMF_CODE_4M.fd. 추가하고 패키지화한 후 다시 실행하세요.OVMF_CODE_4M.ms.fdOVMF_VARS_4M.fdOVMF_VARS_4M.ms.fdgrub-efi-amd64-signedshim-signedgrub-install --target=x86_64-efi --force-extra-removable /dev/sda

관련 정보