免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5513 | 回复: 4

[系统管理] LiveUSB启动不起来,求助 [复制链接]

论坛徽章:
0
发表于 2013-05-07 12:45 |显示全部楼层
重启计算机后出现如下提示:
  GNU GEUB version 0.97 (637k lower /2088644k upper memory)
[Minimal BASH-like line editing is supported. For the first word,TAB
lists possible command cpmpletions. Anywhere else TAB lists the possible
completions of a device/filename. ]

grub>

求助!
grub-install.jpg

论坛徽章:
0
发表于 2013-05-08 09:34 |显示全部楼层
本帖最后由 cliffordl 于 2013-05-08 09:36 编辑

回复 1# cliffordl


grub> kernel   /boot/liveusb-kernel  root=UUID=<UUID>  rootdelay=10
grub> initrd   /boot/initramfs.cpio.gz
grub> boot
引导进入系统加载界面
switch_root.jpg

论坛徽章:
29
技术图书徽章
日期:2013-09-02 19:59:502015元宵节徽章
日期:2015-03-06 15:51:332015小元宵徽章
日期:2015-03-06 15:57:20操作系统版块每日发帖之星
日期:2015-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17操作系统版块每日发帖之星
日期:2015-09-21 06:20:002015亚冠之水原三星
日期:2015-10-30 00:06:07数据库技术版块每日发帖之星
日期:2015-12-24 06:20:0015-16赛季CBA联赛之上海
日期:2016-01-07 10:32:07操作系统版块每日发帖之星
日期:2016-01-08 06:20:00操作系统版块每日发帖之星
日期:2016-05-18 06:20:00IT运维版块每日发帖之星
日期:2016-07-23 06:20:00
发表于 2013-05-08 11:05 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
发表于 2013-05-08 15:32 |显示全部楼层
本帖最后由 cliffordl 于 2013-05-08 16:08 编辑

回复 3# Hongqiyaodao


    4. LiveUSB的制作
4.1 准备工作
  1. 创建“制作基地”
  export LIVEUSB=/opt/liveusb
  mkdir -pv ${LIVEUSB}
  2. 创建制作初始化辅助系统的目录:
  mkdir -pv ${LIVEUSB}/image/initramfs
  3. 创建制作最终系统的目录:
  mkdir -pv ${LIVEUSB}/system
  4. 创建制作LiveUSB目录:
  mkdir -pv ${LIVEUSB}/usb/boot
  “usb”目录用于存放LiveUSB的内容,包括最终系统,“boot”目录存放GRUB相关的文件、内核以及辅助文件等。
  5. 创建数据保存目录
  mkdir -pv save save-data
  分别是“U盘+挂载U盘存储”和“U盘空间存储”方式中使用的数据保存目录。
  6. 创建软件包编译目录
  mkdir -pv ${LIVEUSB}/{build,download}
  export BUILD_DIR=${LIVEUSB}/build
  export DOWNLOAD=${LIVEUSB}/download
4.2 相关软件包的编译安装
  Squashfs-tools是Squashfs软件包中的一个部分,用于将目录或文件复制成SquashFS格式的镜像文件,LiveUSB的制作中用于压缩最终系统。
  Cpio软件包提供用于将文件和目录打包成CPIO格式文件的命令,用于为LiveUSB中的Initramfs辅助系统打包。
  CURL软件包中包含了从网络下载数据和文件的命令和函数库,在LiveUSB制作中作为Git软件包的支持库安装。
  Git软件包提供了分布式的版本管理工具,作为LiveUSB制作过程中用于下载AUFS文件系统的内核补丁包。
  Dosfstools软件包提供的工具命令能够处理MS-DOS使用的文件系统。
  Xfsprogs软件包中包含对XFS文件系统处理的相关命令。
4.3 Live系统的制作
  pushd ${LIVEUSB}/system
  cp -a /{bin,etc,lib,sbin,root,usr} ./
  修改模板系统为LiveUSB的最终系统
  删除不必要的目录
  rm -rf usr/src
  rm -rf lib/modules
  rm -f lib/udev/write_*
  rm -f etc/udev/rules.d/70*
  增加必要的文件和目录
  mkdir -pv dev proc sys tmp mnt home root
  chmod 1777 tmp
  chmod 0700 root
  mkdir -pv var/{run,log,lock,mail,spool}
  mkdir -pv var/{opt,cache,lib/{misc,locate},local}
  建立日志相关文件
  touch var/run/utmp var/log/{btmp,lastlog,wtmp}
  chgrp utmp var/run/utmp var/log/lastlog
  chmod 644 var/run/utmp var/log/lastlog
  创建合适的/etc/fstab
  cat > ${LIVEUSB}/system/etc/fstab << EOF
  none   /proc    proc    defaults       0 0
  sysfs  /sys     sysfs   defaults       0 0
  devpts /dev/pts devpts  gid=4,mode=620 0 0
  tmpfs  /dev/shm tmpfs   defaults       0 0
  EOF
  创建合适的/etc/mtab
  cat > ${LIVEUSB}/system/etc/mtab << EOF
  none   /proc    proc    defaults       0 0
  sysfs  /sys     sysfs   defaults       0 0
  devpts /dev/pts devpts  gid=4,mode=620 0 0
  EOF
  启动脚本变更
  rm -rf ${LIVEUSB}/system/etc/rc.d/rcsysinit.d/{S20checkfs,S30mountfs}
  修改/etc/inittab
  vi ${LIVEUSB}/system/etc/inittab
  1:2345:respawn:/bin/openvt -f -c 1 -e -w -- /usr/bin/root-login
  2:2345:respawn:/bin/openvt -f -c 2 -e -w -- /usr/bin/root-login
  3:2345:respawn:/bin/openvt -f -c 3 -e -w -- /usr/bin/root-login
  4:2345:respawn:/bin/openvt -f -c 4 -e -w -- /usr/bin/root-login
  5:2345:respawn:/bin/openvt -f -c 5 -e -w -- /usr/bin/root-login
  6:2345:respawn:/bin/openvt -f -c 6 -e -w -- /usr/bin/root-login
  建立/usr/bin/root-login命令
  /etc/inittab中设置了使用/usr/bin/root-login命令来代替登陆命令,但该命令并不存在,需要我们创建一个。使用如下命令:
  cat > ${LIVEUSB}/system/usr/bin/root-login << "EOF"
  #!/bin/bash
  exec /bin/login -f root
  EOF
  chmod 0755 ${LIVEUSB}/system/usr/bin/root-login
  设置动态获取IP地址
  pushd ${LIVEUSB}/system/etc/sysconfig/network-devices
  cat > ifconfig.eth0/ip << "EOF"
  ONBOOT=yes
  SERVICE=dhcpcd
  DHCP_START=""
  DHCP_STOP="-k"
  EOF
  popd
  完成最终系统的制作
  popd
5. LiveUSB对内核的要求
  LiveUSB不同于一般使用硬盘安装的系统,需要根据LiveUSB的情况定之内核,LiveUSB必须支持的内核功能如下:
  初始化辅助系统:
  内存磁盘(RAM Disk)
  回环设备(Loop Device)
  SquashFS文件系统
  AuFS文件系统
  U盘设备支持
  U盘所使用的文件系统
  这些支持中除了AuFS文件系统外都已经在标准的Linux内核中提供了相应的功能选项,AuFS文件系统目前还未进入到标准的Linux内核中,需要手动为Linux内核安装AuFS补丁。
  使用下面命令从网络下载AuFS的内核补丁:
  pushd ${BUILD}
  git clone http://git.c3sl.ufpr.br/pub/scm/aufs/aufs2-standalone.git
  cd aufs2-standalone
  git checkout origin/aufs2-33
  popd
  对内核应用AUFS补丁
  patch -Np1 -i ${BUILD}/aufs2-standalone/aufs2-base.patch
  patch -Np1 -i ${BUILD}/aufs2-standalone/aufs2-kbuild.patch
  patch -Np1 -i ${BUILD}/aufs2-standalone/aufs2-standalone.patch
  cp -av ${BUILD}/aufs2-standalone/{fs,include} ./
  此时内核源码已经支持AUFS文件系统了,但还需要配置内核使AUFS成为使用状态。
5.2 配置内核源代码
  make menuconfig
  make     
  安装内核文件
  cp arch/x86/boot/bzImage ${LIVEUSB}/usb/boot/liveusb-kernel
  安装内核模块
  make INSTALL_MOD_PATH=${LIVEUSB}/system/ modules_install
  安装制作的Initramfs文件的特殊命令
  cp -a scripts/gen_initramfs_list.sh ${LIVEUSB}/image/
  cp -a usr/gen_init_cpio ${LIVEUSB}/image/
  popd
6. LiveUSB初始化辅助系统的制作
  进入Initramfs的制作目录开始创建系统,命令如下:
  pushd ${LIVEUSB}/image/initramfs
6.1 Initramfs的init命令
  Initramfs从/init文件开始进行,这是由内核所决定的。
  创建init文件并准备编辑,使用命令:
  cat > init << "EOF"
  #!/bin/bash
  挂载必要的文件系统
  mount -t proc proc /proc
  mount -t sysfs sysfs /sys
  将/dev目录挂载为tmpfs文件系统
  mount -n -t tmpfs -o mode=0755 udev /dev
  使用Udev来创建各种设备文件
  cp --preserve=all --recursive --remove-destination /lib/udev/devices/* /dev
  echo "" > /sys/kernel/uenvent_helper
  udevd --daemon
  mkdir -p /dev/.udev/queue
  udevadm trigger
  udevadm settle
  加载内核模块
  while read module args; do
  case "$module" in
  ""|"#"*) continue;;
  esac
  insmod.static /modules/$(module) ${args} >/dev/null
  done < /modules/conf
  为Live系统准备目录
  export SYSTEM=/SYSTEM
  mkdir -p ${SYSTEM} /mnt
  mount -t tmpfs tempfs /mnt
  mkdir -p /mnt/{usb,system}
  设置等待U盘时间
  DELAY=$(cat /proc/cmdline | awk -F'rootdelay=' 'print $2' |awk -F' ' 'print $1')
  if [ "${DELAY}" = "" ]; then
          sleep 10
  else
          sleep ${DELAY}
  fi
  搜索LiveUSB所在的U盘设备
  UUID=$(cat /proc/cmdline | awk -F’UUID=”’ ‘{print $2}’ | awk -F’”’ ‘{print $1}’)
  if [ "${UUID}"= "" ]; then
          LiveUSB=$(cat /proc/cmdline |awk -F'root=' '{print $2}' | awk '{print $1}')
  else
                  LiveUSB=$(blkid -U ${UUID})
  fi
  if [ "${LiveUSB}" != "" ]; then
          mount ${liveUSB} /mnt/usb
  else
          exit
  fi
  创建最终系统运行环境
    U盘存储方式
  mount -o loop -t squashfs /mnt/usb/Live.img /mnt/sytem
  mount -t aufs -o dirs=/mnt/usb/save=rw:mnt/system=ro aufs ${SYSTEM}
      mount --bind /mnt/usb/save-data ${SYSTEM}/mnt
  切换到最终系统
  终止Udev的运行
  killall udevd
  切换到LiveUSB的最终系统
  exec switch_root ${SYSTEM} /sbin/init
  init命令制作终止
  EOF
  设置init文件的执行权限
  chmod +x init
制作辅助系统
  辅助系统中的init启动脚本内容已经确定,下面要制作出一个可以完成init脚本运行环境的系统。
  创建辅助系统的基本目录
  mkdir bin etc lib proc sys modules
  确定需要的命令
  cp -a /bin/{chgrp,cp,grep,mkdir,sed,sleep} bin
  cp -a /bin/{cat,chmod,mount} bin
  cp -a /usr/bin/{touch,killall} bin
  cp -a /sbin/{switch_root,insmod,static,udevd,udevadm,blkid} bin
  cp -a /usr/bin/{g,}awk bin
  cp -a /bin/bash bin
  复制Udev相关的文件
  cp -a /lib/udev lib
  cp -a /etc/udev etc
  内核模块及配置文件
  for i in vfat.ko loop.ko
  do
          find ${LIVEUSB}/system/lib/modules -name ${i} -exec cp -av '{}' modules/ ';'
  done
  创建配置文件
  cat > modules/conf << "EOF"
  loop.ko max_loop=255
  vfat.ko
  EOF
  用户及组信息文件
  cp -a /etc/{group,passwd} etc
  创建一个空的fstab
  touch etc/fstab
  复制辅助系统中的命令所依赖的函数库
  for i in $(ldd bin/* lib/udev/*id | grep "=>" | sed 's@(.*)@@g' | sort | awk -F'=>' '{print $2}' | uniq);
  do
  cp -v ${i} lib/
  done
  cp -v /lib/ld-linux.so.2 lib/
  cp -v /lib/libnss_files.so.2 lib/
  生成Initramfs文件
  pushd ${LIVEUSB}/image
  sh ./gen_initramfs_list.sh initramfs > file_list
  ./gen_init_cpio file_list > initramfs.cpio
  gzip -9 initramfs.cpio
  cp initramfs.cpio.gz ${LIVEUSB}/usb/boot
  popd
  辅助系统与内核的合并
  make
  cp arch/x86/boot/bzImage  ${LIVEUSB}/usb/boot/liveusb-kernel-init
最终系统的生成
  使用mksquashfs命令将最终系统中的所有文件和目录制作成SquashFS镜像文件,使用如下命令:
  cd /opt/liveusb
  mksquashfs * ${LIVEUSB}/usb/Live.img
  设置GRUB-2
  cd /opt/liveusb/usb
  mkdir -pv boot/grub
  cat > boot/grub/grub.cfg << “EOF”
  set default=0
  set timeout=5
  Menuentry “My LiveUSB with Initranfs” {
  linux /boot/liveusb-kernel root=UUID=<UUID> rootdelay=10
  initrd /boot/initranfs.cpio.gz
   }
  insmod vbe
  set gfxpayload=800x600x16
  EOF
  安装LiveUSB
  mount /dev/sdb4 /mnt
  cp -a ${LIVEUSB}/usb/* /mnt
  UUID=$(blkid /dev/sdb4 | awk -F’UUID=”’ ‘{print $2}’ | awk -F’” ’ ‘{print $1}’)
  sed -i “s@<UUID>@${UUID}@g” /mnt/boot/grub/grub.cfg
  unset UUID
  安装GRUB-2
  cd /mnt
  grub-install --no-floppy --root-directory=. /dev/sdb

论坛徽章:
0
发表于 2013-05-08 16:09 |显示全部楼层
回复 3# Hongqiyaodao


    我感觉就是红色的那一行出错了。问题怎么解决呢,求助
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP