USB 드라이브의 GRUB - 운영 체제 추가

USB 드라이브의 GRUB - 운영 체제 추가

일부 배경:

  • 주로 Windows 배경에서 왔으며(Ubuntu 등에 익숙하지만) Windows 7 시스템을 사용하여 이 작업을 수행합니다.
  • USB 드라이브(8GB FAT32 드라이브)의 MBR에 GRUB를 성공적으로 설치했습니다.
  • 드라이브에 기본 구조가 생성되었습니다: /boot/grub, /boot/img, /boot/kernel

질문:

몇 가지 기본적인 초보자 질문이 있지만 Google/StackExchange 등을 통해 답변을 찾을 수 없습니다.

  • 나는 /boot/img/[SystemName] 폴더가 /boot/kernel 디렉토리에 저장된 다양한(또는 동일한) 버전의 Linux 커널을 사용할 수 있는 특정 시스템에 대한 이미지를 저장한다는 것을 알고 있습니다(적어도 내 생각에는 그렇습니다) ) 설정이 필요합니다)
  • 그러나 대부분의 시스템에는 디렉터리에 "linux"(지정되지 않은 버전)라는 이름의 커널만 있습니다. 그들이 모두 어떤 커널을 사용하는지 찾을 수 있지만 커널 자체를 /boot/kernel에 복사하기에 가장 좋은 위치는 어디입니까?
  • 커널이 있으면 남은 작업의 대부분은 장치를 /boot/img/에 복사하고 menu.lst에 올바른 항목을 만드는 것입니다. 그렇죠? 참조할 커널을 얻을 수 있게 되면 시스템별로 이 작업을 수행할 수 있습니다.

전체 목표:

GRUB 부팅 메뉴에서 여러 운영 체제를 부팅할 수 있는 8GB USB 플래시 드라이브를 만들려고 합니다. 운영 체제를 추가하거나 빼려면 적절한 파일을 /boot/img/[SystemName] 및 /boot/kernel 폴더(필요에 따라)에 복사한 다음 menu.lst 파일을 편집하면 됩니다. 따라서 첫 번째 단계는 중복을 줄이고 싶기 때문에 많은 운영 체제에서 공유되는 커널을 찾는 것입니다.

답변1

당신이 달성하고자 하는 것은 부팅 기술을 확장하는 것입니다. :) 그러나 완전한 연습을 제공하기에는 내 지식이 충분하지 않더라도 가능하다고 생각합니다.

첫째, 앞서 말했듯이 배포판에는 매우 다른 요구 사항이 있습니다. 둘째, 반면에 좋은 점은 최소 요구 사항이 필요한 배포판도 찾을 수 있다는 것입니다.

GRUB4DOS를 부트로더로 사용하는 것이 좋습니다. 이것 좀 봐협회USB와 함께 사용하는 방법(find --set root -- 명령이 있으므로 USB와 같은 모바일 장치를 사용하는 경우 중요합니다).

그런 다음 사용할 파티션 수를 결정해야 합니다. 표준 "전체 설치"는 항상 단일 파티션에 수행됩니다. 따라서 8GB USB 스틱이 있고 4GB 파티션(최소 설치 가능)을 사용하는 경우 Debian 또는 Fedora와 같은 주요 배포판의 2가지 "전체 설치"로 제한됩니다.

그러나 일부 작고 전문적인 Linux 배포판이 있습니다. 예를 들어 "Puppy Linux"는 매우 작으며 특별한 "알뜰한 설치" 모드를 가지고 있습니다. 이는 다양한 형태로 제공됩니다(예: Apple과 유사한 데스크톱을 구현하려는 MacPup 또는 64비트 Linux인 Fatdog64).

이 "알뜰한 설치" 모드에서는 1개의 디렉터리만 사용하며 하드 드라이브(또는 USB)에 기존 Linux 또는 Windows와 병렬로 설치할 수 있습니다. 비슷한 패턴을 지원하는 다른 배포판이 있을 것이라고 확신합니다.

Puppy Linux는 크기가 작기 때문에(< 150MB) 각 설치마다 작은 저장 파일(512MB)을 보관한다고 가정하면 USB 스틱에 10개의 서로 다른 운영 체제를 쉽게 설치할 수 있습니다. 더 작은 Linux 버전(Slitaz, Tinycore)도 사용할 수 있습니다.

예를 들어, 현재 PC 설치에서 menu.lst(GRUB4DOS) 파일을 첨부했는데 처음 8개 항목이 모두 다릅니다. Puppy Linux는 hd0,2(즉, 첫 번째 하드 드라이브의 세 번째 파티션)에 설치되어 있으며 그 다음에는 최소 원시 Windows-XP와 함께 작은 추가 파티션에 데비안 설치.

timeout=10
default=0  

  title Linux Buero (on /dev/sda3)
  root (hd0,2)
  kernel /puppy431-de/vmlinuz psubdir=puppy431-de pkeys=de ro vga=normal
  initrd /puppy431-de/initrd.gz

  title Live CD build (on /dev/sda3)
  root (hd0,2)
  kernel /puppylivecdbuild/vmlinuz psubdir=puppylivecdbuild ro vga=normal
  initrd /puppylivecdbuild/initrd.gz

  title sage developement(on /dev/sda3)
  root (hd0,2)
  kernel /Sage46dev/vmlinuz psubdir=Sage46dev pfix=nocopy ro vga=normal
  initrd /Sage46dev/initrd.gz

  title sage developement test and fun
  root (hd0,2)
  kernel /Sage-test/vmlinuz psubdir=Sage-test pfix=nocopy,noram ro vga=normal
  initrd /Sage-test/initrd.gz

  title Lupq 511
  find --set-root --ignore-floppies /lupq511/initrd.gz
  kernel /lupq511/vmlinuz psubdir="lupq511" pfix=nocopy pkeys=de ro vga=normal
  initrd /lupq511/initrd.gz 

  title Lupu 520 - New kid on the block
  find --set-root --ignore-floppies /lupu-520/initrd.gz
  kernel /lupu-520/vmlinuz psubdir="lupu-520" pfix=nocopy pkeys=de ro vga=normal
  initrd /lupu-520/initrd.gz 

  title wary beta (on /dev/sda3)
  root (hd0,2)
  kernel /wary/vmlinuz psubdir=wary ro vga=normal
  initrd /wary/initrd.gz

  title spup (on /dev/sda3)
  root (hd0,2)
  kernel /spup/vmlinuz psubdir=spup ro vga=normal
  initrd /spup/initrd.gz

  title Debian (on /dev/sda2)
  find --set-root --ignore-floppies /initrd.img
  kernel /vmlinuz root=/dev/sda2 ro
  initrd /initrd.img

  title Windows NT/2K/XP\nStart Windows if installed on HDD
  fallback 7
  find --set-root --ignore-floppies /ntldr
  chainloader /ntldr

boot

USB의 menu.lst는 비슷하게 보일 수 find --set-root --ignore-floppies /lupq511/initrd.gz 있으며, USB를 사용하는 경우 GRUB4DOS 명령(모든 드라이브에서 이 파일 찾기)이 유용할 수 있으므로 드라이브에 대해 고정된 항목을 사용할 필요가 없습니다.

위의 정보를 바탕으로 원래 질문에 대한 몇 가지 의견:

Q: * 내가 아는 바로는 /boot/img/[SystemName] 폴더는 /boot/kernel 디렉터리에 저장된 다양한(또는 동일한) 버전의 Linux 커널을 사용할 수 있는 특정 시스템에 대한 이미지를 저장합니다(적어도 , 이것이 내가 설정하고 싶은 방식입니다)

A: 대부분의 주요 배포판에서는 파티션에 대한 독점권을 갖고 파일에 대한 특정 디렉터리 구조를 설치하기를 원하기 때문에 이것이 가능한지 잘 모르겠습니다. 제 생각에는 기본값을 존중하고 배포판에서 기대하는 것을 제공하는 것이 더 좋습니다. 즉, 일부는 독점 파티션이 필요하고 일부는 공유 파티션의 디렉터리가 필요합니다. 기본이 아닌 방식으로 하나의 파티션에 여러 운영 체제를 설치하는 것이 불가능하다고 말하는 것은 아니지만, 이는 번거롭고 제 생각에는 Linux 초보자에게는 비실용적입니다. 게시물 하단에 가능한 해결 방법("Wubi와 같은" 설치)을 언급했습니다.

Q: * 그러나 대부분의 시스템에는 디렉터리에 "linux"라는 이름의 커널(지정되지 않은 버전)만 있습니다. 이들 모두가 어떤 커널을 사용하는지 찾을 수 있지만 커널 자체를 /boot/kernel에 복사하기에 가장 좋은 위치는 어디입니까?

대답: 커널은 배포판이 일반적으로 가지고 있는 위치에 정확하게 배치되어야 한다고 생각합니다. 별도의 /boot/kernel 폴더에 저장할 필요가 없으며 배포판 간에 공유하는 것을 권장하지 않습니다. 커널에는 작은 저장 공간(예: 2-3MB)이 ​​있습니다. 실제로 많은 버전과 하위 버전이 있으며 때로는 배포판 커널에 적용되는 특정 패치도 있습니다. 다른/테스트되지 않은 코어를 연결하는 것은 불필요한 실험입니다.

Q: * 일단 커널을 얻은 후에 남은 작업의 대부분은 장치를 /boot/img/에 복사하고 menu.lst에 올바른 항목을 생성하는 것입니다. 그렇죠? 참조할 커널을 얻을 수 있게 되면 시스템별로 이 작업을 수행할 수 있습니다.

답변: 앞서 언급했듯이, 필요한 배포판에 대해 별도의 파티션을 만들고, 덜 욕심나는 배포판을 자체 폴더에 혼합하는 것이 가장 좋습니다. 커널, initrd 및 나머지 배포판을 단일 단위로 처리합니다.

마지막 생각입니다. 다른 파티션을 사용하고 싶지 않다면 자체 파티션에 전체 설치가 필요한 "WUBI" 설치와 같은 배포판을 사용해 볼 수 있습니다. 이는 자체 ext2/ext3 파일 시스템을 사용하여 USB에 대용량 파일을 생성한 다음 이를 "드라이브"로 마운트하고 여기에 OS를 설치할 수 있음을 의미합니다. (가장 유명한 애플리케이션이기 때문에 WUBI라고 부릅니다.)

다음은 "Wubi 설치"를 부트스트랩하는 Grub4dos menu.lst 항목이어야 합니다.

# Add the ntfs module - just needed for Installation on a Windows Partition
insmod ntfs
# Set root (normally would be sda1, or hd0,1 Change as necessary
set root=(hd0,1)
loopback loop0 /ubuntu/disks/root.disk
set root=(loop0)
linux /boot/vmlinuz root=/dev/sda1 loop=/ubuntu/disks/root.disk ro
initrd /boot/initrd/initrd.img
boot

~에서여기.

보시다시피 2개의 "set root" 명령이 있고 Linux가 포함된 "root.disk" 다음의 두 번째 명령이 loop0으로 마운트됩니다.

이것이 완전한 연습은 아니지만 몇 가지 아이디어를 제공할 수 있기를 바랍니다.

답변2

다음은 두 가지 가이드입니다.

나는 둘 다 각 코어에 대해 별도의 파티션을 사용한다고 생각합니다.

"의 항목/boot/grub/menu.lst"그런가요?

title Unity-2010 -- With Persistence
kernel (hd0,0)/isolinux/vmlinuz vga=788 livecd=livecd fromusb
root=Label=Unity-2010 changes_dev=LABEL=Unity-2010 acpi=on fstab=rw,noauto
initrd (hd0,0)/isolinux/initrd.gz

title Unity-2010 -- No Persistence
kernel (hd0,0)/isolinux/vmlinuz vga=788 livecd=livecd fromusb
root=Label=Unity-2010  acpi=on fstab=rw,noauto
initrd (hd0,0)/isolinux/initrd.gz

답변3

실제로 거기에 넣은 배포판에 따라 다릅니다. 그들 중 일부는 initramfs에서 불쾌한 작업을 수행하므로 이것이 어려워집니다. 일부 라이브 배포에서는 태그를 검색하고 일부는 uuid를 검색합니다. 당신은 그것을 제공할 수 없습니다.

해결책은 쉽지 않습니다. 라이브 배포를 위한 새로운 사용자 정의 램디스크를 구축해야 합니다.

제가 착각하지 않았으면 좋겠습니다 :D

답변4

각 커널과 함께 사용하려면 일종의 사용자 공간이 필요합니다. (프로그램, 구성, 작업.) 전통적으로는 다음을 사용합니다.적어도각 개별 운영 체제에 대한 파티션이 있으며 GRUB 파티션 자체는 /boot로 마운트됩니다(따라서 실제로 해당 파티션의 하위 디렉터리로 부팅할 수는 없습니다. 루트 디렉터리가 되며 grub/이 하위 디렉토리 목차 )

관련 정보