Linux U盘 启动盘

时间:2021-07-07 07:05:48
/******************************************************************************
 *                          Linux U盘 启动盘
 * 说明:
 *     之前一直有个想法,那就是将x86的系统放在U盘中,像ARM那样做,但一直也不知
 * 道大概要怎么查资料,最近搞redhat,查到了一些相关资料,记录一下。
 *
 *                                         2017-3-6 深圳 南山平山村 曾剑锋
 *****************************************************************************/

一、参考文档:
    1. 制作一个linux的u盘最小系统
        http://zhuyi108.blog.51cto.com/2087327/845246
    2. 制作u盘启动linux系统
        http://www.voidcn.com/blog/mr_zhaojy/article/p-5974248.html
    3. U 盘启动LINUX
        http://blog.csdn.net/clozxy/article/details/5865632
    4. 定制自己的U盘Linux系统
        http://mowblog.com/%E5%AE%9A%E5%88%B6%E8%87%AA%E5%B7%B1%E7%9A%84u%E7%9B%98linux%E7%B3%BB%E7%BB%9F/
    5. CDlinux HOWTOs 文档
        http://cd-linux.sourceforge.net/archive/0.4/howto-cn.html
    6. GRUB (简体中文)
        https://wiki.archlinux.org/index.php/GRUB_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)
    7. 什么是 initrd.img
        http://blog.csdn.net/chrisniu1984/article/details/3907874
    8. Linux2.6 内核的 Initrd 机制解析
        https://www.ibm.com/developerworks/cn/linux/l-k26initrd/
    9. Linux 初始 RAM 磁盘(initrd)概述
        https://www.ibm.com/developerworks/cn/linux/l-initrd.html
    10. Linux 引导过程内幕
        https://www.ibm.com/developerworks/cn/linux/l-linuxboot/
    11. LINUX下三个内核文件详解(vmlinuz/initrd.img/System.map)
        https://www.path8.net/tn/archives/5304

二、基本操作说明:
    1. U盘(SD卡)分两个区:
        1. /dev/sdb1;
        2. /dev/sdb2;
    2. mount /dev/sdb1 /mnt
    3. grub-install –root-directory=/mnt /dev/sdb
        Installing for i386-pc platform.
        Installation finished. No error reported.
    4. ls /boot/grub/
        fonts gfxblacklist.txt grub.cfg grubenv i386-pc locale unicode.pf2
    5. 编写/boot/grub/grub.cfg文件:
        set default=0
            insmod gzio
            insmod jpeg
            insmod part_msdos
            insmod ext2
            insmod ext3
            insmod ext4
        set timeout=10
        set root='hd0,1'
            # linux (hd0,1)/boot/vmlinuz rw # root=/dev/sdb2 rootfstype=ext3
            linux (hd0,1)/boot/vmlinuz rw root=/dev/sdb2 rootfstype=ext3
            initrd (hd0,1)/boot/initrd.img
            boot
    6. 拷贝对应的系统文件,最终/dev/sdb1分区目录如下:
        .
        └── boot
            ├── grub
            │   ├── fonts
            │   ├── grub.cfg
            │   ├── grubenv
            │   ├── i386-pc
            │   └── locale
            ├── initrd.img
            ├── initrd.img_redhat
            ├── initrd.img_ubuntu
            ├── vmlinuz
            ├── vmlinuz_redhat
            └── vmlinuz_ubuntu
    7. 下载Ubuntu Core,并将其解压到/dev/sdb2分区中,注意将passwd中间中root密码去掉,否则要输入密码。
    8. 如上所示,既有redhat,又有ubuntu的,遇到了redhat内核版本过低,Ubuntu Core版本高过不能挂载文件系统的问题。

三、遇到错误:
    1. 现象:
        ...
        mount: could not find filesystem /dev/root 
        Setting up other filesystems
        Setting up new root fs
        setuproot: moving /dev failed: No such file or directory
        ...
    2. 参考文档:
        1. [SOLVED] Getting existing CentOS5 system to run with a new motherboard
            https://www.centos.org/forums/viewtopic.php?t=24681
        2. Creating a New Initial RAM Disk
            https://wiki.centos.org/TipsAndTricks/CreateNewInitrd
    3. 原因:
        If you have changed a motherboard or moved a disk to a different system it may fail to boot due to the lack of appropriate drivers in the initial RAM disk image (initramfs for CentOS 6, initrd for CentOS 5).