보조 부팅 파티션에서 grub Ubuntu 12.04 부팅을 만들고 새로운 별도의 루트 디렉터리를 사용하는 방법

보조 부팅 파티션에서 grub Ubuntu 12.04 부팅을 만들고 새로운 별도의 루트 디렉터리를 사용하는 방법

원격 Ubuntu 서버에서 데스크탑에서 설치하기 위해 일련의 업그레이드/변경을 수행했습니다.우분투 10.10은 독특합니다서버에 설치12.04 LTS 정확

몇 가지 문제를 제외하고는 모든 것이 잘 진행되고 있으며 지금까지 물리적인 접근이 불가능했습니다. 다음 목표는 LVM을 백엔드 스토리지로 사용하여 XEN 서버를 만드는 것입니다. 시스템에 LVM이 없습니다. 12.04 LTS에 도달한 후 LVM을 추가했습니다. XEN 머신에서 원격으로 생성하는 방법을 알고 있으며 이전에도 해본 적이 있습니다. 하지만 새 구성을 시작하는 데 문제가 있습니다.

이 상자를 설치한 사람은 파티셔닝에 주의를 기울이지 않은 것으로 나타났습니다. 시스템은 서버로 사용되었지만 데스크탑으로 설치되었지만(이 문제를 해결했습니다) 다음 파티셔닝 구성표가 남았습니다.

Disk /dev/sda: 500.0 GB, 499999834112 bytes
... 
Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1       58558   470361088   83  Linux
/dev/sda2           58558       60789    17916929    5  Extended
/dev/sda5           58558       60789    17916928   82  Linux swap / Solaris

그래서 거대한 17G 스왑 파티션을 새 부팅 파티션(현재 /dev/sda2), 작은 스왑 파티션(/dev/sda3) 및 새 루트 파티션(lvs)으로 재구성했습니다. 디스크 사용량을 충분히 작은 3GB 정도로 낮추고 LVM 아래에 만든 새 루트 디렉터리에 복사했습니다.

현재 우리는

Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048   940724223   470361088   83  Linux
/dev/sda2   *   940724224   941748223      512000   83  Linux
/dev/sda3       941748224   943845375     1048576   82  Linux swap / Solaris
/dev/sda4       943845376   976562175    16358400   8e  Linux LVM

/dev/sda1은오래된 부팅 파티션머신이 /dev/sda2에서 부팅되기를 원합니다. 이제 차이점은 별도의 /boot 및 / 파티션이 필요하다는 것입니다. 루트 파티션은 LVM에서 호출됩니다.

# lvscan
ACTIVE            '/dev/server20/root' [10.00 GiB] inherit

최종 목표는 /dev/sda1을 LVM 제어 하에 두고 싶지만 이를 사용하지 않는 방식으로 시스템을 부팅해야 한다는 것입니다. 그 시점부터 LVM이 작동합니다.

위의 전체 파일 시스템 변경 외에도 다음 작업도 수행했습니다.

생성된 논리 볼륨:

pvcreate /dev/sda4 
vgcreate server20 /dev/sda4
lvcreate -L 10G -n root server20
mkfs.ext4 /dev/server20/root

설치하세요:

mount /dev/server20/root /mnt/root/
mount /dev/sda2 /mnt/root/boot/
(cd / ; find . -xdev -print0 | rsync -xavz . /mnt/root/)
for i in /dev /run /dev/pts /proc /sys; do sudo mount -B $i /mnt/root$i; done

그럽 업데이트:

chroot /mnt/root
echo "dm-mod" >> /etc/initramfs-tools/modules
echo "dm-mod" >> /etc/modules
grub-mkconfig (verified config file visually)
update-grub (no errors/warnings)

생성된 /boot/grub/grub.cfg를 확인하면서 대부분의 내용이 정확하다는 것을 알았습니다. 특히 다음과 같은 내용이 그렇습니다.

insmod lvm
...
set root='(server20-root)'
search --no-floppy --fs-uuid --set=root 0bb92c24-8c02-4fa3-8f75-970076261b2f
...

menuentry 'Ubuntu, with Linux 3.2.0-38-generic' --class ubuntu --class gnu-linux --class gnu --class os {
    recordfail
    gfxmode $linux_gfx_mode
    insmod gzio
    insmod part_msdos
    insmod ext2
    set root='(hd0,msdos2)'
    search --no-floppy --fs-uuid --set=root 891b3eaa-fb43-4a42-9789-a91c2a5ffb13
    linux   /vmlinuz-3.2.0-38-generic root=/dev/mapper/server20-root ro quiet
    initrd  /initrd.img-3.2.0-38-generic
}
...

그런 다음 blkid를 확인하십시오.

/dev/sda2: UUID="891b3eaa-fb43-4a42-9789-a91c2a5ffb13" SEC_TYPE="ext2" TYPE="ext3"
/dev/sda4: UUID="IyDrfU-TOYT-rFXO-JknG-rwEK-Sm2A-mfKcIe" TYPE="LVM2_member"
/dev/mapper/server20-root: UUID="0bb92c24-8c02-4fa3-8f75-970076261b2f" TYPE="ext4"
/dev/sda1: UUID="888c061a-1d51-4516-aced-4bb21042d2f4" TYPE="ext4"
/dev/sda3: UUID="19efc041-eccd-42c9-94aa-5b6c88ffd5bb" TYPE="swap"

그래서 제가 여기서 배운 것은 내 부팅 파티션이 msdos2, 즉 /dev/sda2가 될 것이라는 것입니다. uuid는 검색 줄에서도 참조됩니다. 비록 루트라고 되어 있지만 다른 설치와 비교했습니다. 이는 루트/부팅 분리가 부팅 uuid임을 의미합니다(올바른 가정?).

연결된 디스크 레이아웃을 사용하여 다시 시작할 수 있다고 생각했지만 그렇지 않습니다. fdisk를 사용하여 /dev/sda1 및 /dev/sda2 부팅 가능 플래그를 활성화했습니다. 이전과 같은 방식으로 시작되었으며 다행히 아무런 문제도 발생하지 않았습니다.

내 더 깊은 문제는 chroot + update-grub에 대한 오해로 인해 발생할 수 있습니다. 실제로 root/boot /dev/sda1에서 무엇을 해야 할지 잘 모르겠습니다. chroot 버전의 grub.cfg를 /boot 하위 디렉터리로 복사해야 합니까?

재부팅 후 수행한 단계

switched off bootable flag on /dev/sda1
remounted everything again and performed all steps again plus an additional
grub-install /dev/sda  (from the chroot)

/dev/sda1을 무시해도 충분합니까? grub에 대한 모든 내용을 읽었지만 동일한 디스크에 2개의 부팅 파티션이 있을 때 부팅 프로세스가 어떻게 작동하는지에 대한 답변을 얻을 수 없습니다. (다른 경우도 많습니다.) chroot를 사용하는 것과 비슷한 것을 사용하는 grub 프로세스를 상상할 수 있습니까?grub-install --boot-directory=/mnt/boot. 내부적으로는 어떻게 처리되나요?

이 질문에 대해 더 나은 제목을 제안해 주시기 바랍니다. 저는 이 질문이 정말 끔찍합니다.

또한 이것은 MBR입니다.

dd if=/dev/sda of=mbr.bin bs=512 count=1
root@server20:/# file mbr.bin 
mbr.bin: x86 boot sector; 
partition 1: ID=0x83, starthead 32, startsector 2048, 940722176 sectors; 
partition 2: ID=0x83, active, starthead 95, startsector 940724224, 1024000 sectors; 
partition 3: ID=0x82, starthead 29, startsector 941748224, 2097152 sectors; 
partition 4: ID=0x8e, starthead 167, startsector 943845376, 32716800 sectors, code offset 0x63

답변1

다시 재부팅을 시도했는데 마지막 3단계를 통해 문제가 해결된 것 같습니다.

using fdisk to switch off bootable flag for /dev/sda1
partprobe so the kernel knows about changes
remounted everything again on top of root at /mnt/root and performed:
grub-install /dev/sda  (from the chroot)
update-grub

MBR 덤프를 보면 이번에는 효과가 있었다고 믿게 됩니다. LVM 루트를 사용하기 시작했습니다. 부팅 파티션을 마운트하지 못한 것으로 보이지만 시스템은 마운트에 성공했습니다. 더 작은 /dev/sda1로 다시 변경하고 동일한 프로세스를 수행해야 했습니다.

관련 정보