从外部USB驱动器上的映像启动Debian Linux

我有一个大的VFAT分区的外部USB硬盘驱动器。 为了在Windows系统上偶尔运行Linux,我想在外部硬盘的VFAT分区上保存一个Debian Linux安装文件(比如debianroot.img )。

我从现有的Linux系统创build安装。 我知道如何为debianroot.img创build一个loopback设备,在debianroot.img创build和挂载一个ext3文件系统,我可以使用debootstrap (例如)在目标位置安装Debian。 这只是我不熟悉的启动过程。

我的BIOS支持从USB设备启动,因此它应该可以将启动pipe理器写入外部硬盘驱动器的MBR,然后从那里启动。 但我不确定哪个引导pipe理器最适合(grub?),如果标准Debian内核有足够的选项,如果/如何configuration初始ramdisk设备( initrd ),以及如何在外部正确获取引导文件硬盘。

乍一看, 环回根文件系统HOWTO似乎包含非常有用的信息,但看起来过时(1999),并不是特定于Debian。

关于bootmanager:当使用FAT作为文件系统时,syslinux将是一种方法。 特别是从USB启动时,您可能会考虑使用grub来启动,因为您可以灵活地使用grub shell(提供一个很好的tab-completion)。 要安装grub,你需要运行如下的东西:

 mount /dev/sdX /mnt/ grub-install --recheck --no-floppy --root-directory=/mnt /dev/sdX 

并相应地调整/boot/grub/menu.lst。

你的引导程序必须加载内核和initrd。 所以这些文件必须在你的debianroot.img之外(除非你使用ISO方法和grub2及其环回选项,参见http://michael-prokop.at/blog/2009/05/25/boot-an- iso-via-grub2 / ),需要在引导程序中引用/configuration(syslinux为syslinux.cfg,grub1为menu.lst,grub2为grub.cfg)。 以下是由grml2usb( http://grml.org/grml2usb/ )生成的用于grml live系统( http://grml.org/ )的示例menu.lst文件:

 # misc options: timeout 30 splashimage=(hd0,0)/boot/grub/splash.xpm.gz foreground = 000000 background = FFCC33 title grml - Default boot (using 1024x768 framebuffer) kernel (hd0,0)/boot/release/grml/linux26 apm=power-off vga=791 quiet boot=live nomce live-media-path=/live/grml/ initrd (hd0,0)/boot/release/grml/initrd.gz 

initrd文件必须在您的设备上finddebianroot.img,然后使用loopback安装它。 然后,它应该通过例如pivot_root(请参阅http://linux.die.net/man/8/pivot_root )更改您的根文件系统到已挂载的回送文件中。 你可以在linux内核源代码的Documentation / initrd.txt中find关于initrd进程的更多细节: http ://lxr.linux.no/linux/Documentation/initrd.txt

如果你想知道普通的现场系统如何做这种东西,请查看debian-live( http://debian-live.alioth.debian.org/ )或grml-live( http://grml.org/ grml-live / )结合live-initramfs(它执行所有的initrd / initramfs魔术,并在大多数基于Debian的直播系统中使用; http://packages.debian.org/sid/live-initramfs )。

对你的debianroot.img方法的一个不同的方法是谈论一个现有的基于Debian的Linux Live系统,提供所谓的“根持久性”(例如官方的Debian-live项目提供这个以及grml 2009.05)。

如果要将文件系统保存为VFAT,请使用syslinux 。

你有几个问题需要解决:

1)从USB驱动器启动。

2)获取引导程序加载内核和initrd。

3)设置系统,使其可以转到“/”分区。

Number 1非常简单,你可以通过BIOS来启动USB设备,然后执行grub-install等操作来修改MBR。 通知2和3是不同的步骤。 人们通常有一个单独的小引导分区,grub可以读取grub可以find的内核,initrd等。 您仅限于grub可以理解的设备types和设置。 我不是很积极,但是我敢肯定,你不能让grub挂载一个loopback文件系统到/ boot。

重新分区驱动器并为/ boot创build一个ext2 / 3分区可能会更好。 你仍然需要解决设置initrd和内核的问题,以使得挂载的loopback文件系统能够转到“/”,但这听起来是可能的。