“华梦“全国大学生开源软件技术创意大赛

 找回密码
 立即注册
搜索
查看: 7519|回复: 0

LiveU系统制作方法

[复制链接]

6

主题

0

好友

276

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2015-6-6 16:43:10 |显示全部楼层

将你硬盘中的Linux系统迁移到U盘!

  针对本次竞赛技术布局,面向自身依托互联网+的业务需要,在此个性化U盘中,通过实现对特定系统工具与应用的删减,如,集成需要的网络浏览器、办公系统和可能需要的图形化硬盘工具等应用。完成针对业务设定的应用环境预设,如B/S架构应用的浏览器页面预设,C/S下的客户端应用配置等。

  为此,在完成基于服务器的数据业务规划后(或许只是一个可反映大数据理念的业务网站),那随后再看看如何通过LiveU技术实现定制应用的基本方式。

迁移你电脑中的Linux系统,让你的U盘成为你的随身Linux系统!


1. 为什么
2. 如何做
3. 啥问题



1. 为什么?
还用虚拟机做Linux的使用环境?

输入点什么都卡半天,编译个项目机器风扇狂转?

又不想在个人电脑中分出空间安装系统。

那就做一个简单的U盘Linux 戴在身上,随时借用主机硬件,编译读写。


首先做什么?

还是需要你装一个Linux系统,以下以普华桌面操作系统为例。

没听过普华Linux,不要紧,这不是普华永道,是普华基础软件出的一款国产Linux的系统。

听说过普华Linux,你很懂,国家任务,产业体系,说明我们教学推广还有一定效果。


各大院校开源镜像点,也争相建立过程中。



2. 如何做
准备一个大容量U盘。(要多大?看你需求,但也非越大越好,32G盘兼容性需要你来考证)

这里建议使用USB3.0  16g

速度刚刚好,容量刚刚够。。。

一台已经安装了普华Linux(iSoft Linux)

操作步骤:

第一步:格式化U盘

       可以根据自己熟悉的格式化工具进行,较为常用的Linux命令有“fdisk”和“parted”,用法和区别大家自己探寻。另外,在师资培训、巡讲活动中,分发给院校老师的教育LiveU样盘中,还增加了“GParted”图形化硬盘管理工具,会更加直观。也可以考虑在自己的作品中集成进去。

       在规划自己的U盘分区时,要注意一点,如果需要附加设置一个可多系统分享数据分区,如“FAT32”分区,则一定要建立在第一个U盘分区中,否则Win会无法识别,大家自行分析原因吧。

fdisk应用参考样例(单独一个分区):

  插入一个适宜容量的U盘,注意数据已经备份过了,先假设为sdb吧(U盘的设备符号常见sdb,sdc,看你插几个U盘了,可自行查证本机U盘设备名)。

$fdisk  /dev/sdb
随后可通过如下命令完成,删除、创建分区和建立引导位工作。
  d             (删除原有分区,如果分区很多的话,可以按提示进行输入相关分区号)
  n             (创建新分区,一切默认选项,即直接回车)
  a             (创建引导位)

注:其它关于fdisk 的用法可动手搜搜!

完成分区划分后,还需要进行分区格式化,才能使用;这里同样假设U盘是sdb,且为第一个分区,实际各自对应设置即可:

$mkfs.ext4   /dev/sdb1    (格式化U盘为ext4格式,当然你还可以使用ext3)

对比GParted类的图形分区技术,或许对桌面用户更为直观简捷,可参阅促进中心教学资料。

第二步:拷贝系统文件到 U盘中

  建立好U盘的系统分区后,就需要将硬盘安装好的基准Linux系统数据架构(我们这里演示的是普华桌面操作系统),复制到U盘的Linux系统分区中(现在U盘对应分区还是空的吧)。这里,应该会想到可能会遇到的权限等问题吗?从中有啥体会吗?记下来,大家分享!

拷贝前需要先挂载的呀!

mount   /dev/sdb1   /mnt/U    #没有/mnt/U,需要先创建的

拷贝文件目录:(还记得根目录下有哪些目录吗?每个目录存放哪些类型的文件吗?应该怎么拷贝这些目录到你的U盘里?先表看我的答案,您先想想,方法有很多的哦!)

tar  cvf   -  /boot/  /bin  /sbin  /lib  /lib64  /root/  /opt/  /srv/  /usr/  /var/  /run/  /etc/  /home/  |  tar   -xvf   -   -C    /mnt/U/

注意我的答案中的有很多减号和空隔的亲!

再创建几个目录吧

cd   /mnt/U

mkdir   proc    tmp    sys    dev  mnt     #想想为什么创建这几个目录?

第三步:挂载虚拟文件系统

知道为什么要挂载吗?

cd   /mnt/U

mount -B  /proc/  proc/

mount -B  /dev/  dev/

mount -B  /sys/  sys/

因为不挂载,后续步骤会报错,例如:/usr/bin/grub-probe:错误: cannot find a device for / (is /dev mounted?).

第四步: 将grub安装到U盘

此时仍为主机硬盘系统运行环境中,U盘还只是一个具备同样系统架构的数据盘而已,现在就来实现她的Live化吧。需要先改变程序执行时所参考的根目录位置到U盘,来将当前位置切换到U盘的目标系统分区根点后,是“cd”吗?随后执行:

$ sudo chroot  /mnt/U/   #切换到你U盘的系统了哦亲!

如出现bash无法使用问题,可使用$sudo  chroot  .  /bin/bash
现在进入U盘的grub配置目录中,修改启动U盘的grub.cfg文件,好象是GRUB2的规格了,可以理解内容吗?

$cd  /boot/grub

$ cp  grub.cfg  grub.cfg-max    #先备份下grub配置的原文件吧,毕竟这是一个好习惯。

$grub-mkconfig   -o  grub.cfg   #重建grub配置文件。

修改定制自己的grub.cfg文件,工具自己选,这可是文本文件,VI当然可以。

$vim  grub.cfg                           #修改文件中无关的grub启动项,默认可不改(但会把本地的相关系统引导添加进来),保存退出

再来安装针对定制后的U盘GRUB,使启动引导系统能够从U盘引导。

$grub-install  /dev/sdb    #安装grub到U盘。

注意,是需要在chroot后进行呦,如在本机硬盘系统中执行会引起拔出U盘后无法启动的问题。好像有点意思了,网上搜搜,恐怕grub-install还会有不少灵感,记住,这里的样例是GRUB2哈。

做完上面的步骤,基本上你的U盘就可以在虚拟机(如kvm)中引导,并能够成功进入U盘系统了,如执行如下命令(当然也可以用图形方式):

首先保证你已经安装了kvm,qemu等包。这里假设/dev/sdc为你的U盘。

qemu-system-x86_64 -enable-kvm -cpu host -hda /dev/sdc -m 1000 -display sdl -vga cirrus

为了能够在多台机器机器引导,还需删除fstab文件中相关行,如:

[root@isoft ~]# cat /etc/fstab
UUID=65ab6eac-0c63-48c6-9fed-44cf2fdac7cd       /      ext4     defaults      1         1                  
UUID=49b32a4d-80ee-43b5-bf5a-e982a139a677       swap   swap     defaults      0         0                  
/dev/sda7                               /mnt/hda1               ext4    defaults        0 0
/dev/sda8                               /mnt/hda5               ext4    defaults        0 0

这些挂载都是制作U盘系统时本地物理机的挂载分区,可以把其注销,否则,当您拿刚制作的U盘到其它机器上引导时会出现进不了图形界面的情况。


若想从物理机引导,可以简单的通过如下 方式实现:                                                                                                               
                                                                                                                          
第五步:重新制作initramfs文件。                                                                                          
    修改 /etc/mkinitcpio.conf 文件。                                                                                      
                                                                                                                          
把大约第七行的MODULES改成如下行:                                                                                       
MODULES="ehci_hcd xhci_hcd uhci_hcd sd_mod ext4 ext3"

此步为引导HOOKS前需加载的相关模块。

为了支持更多的设备或特性,可以加载更多的模块,可以改成如下:

MODULES="scsi_mod aacraid ehci_hcd uhci_hcd xhci_hcd advansys aes_586 aes_generic aesni-intel aes-x86_64 aha152x aha1542 aha1740 ahci aic79xx aic7xxx aic7xxx_old aic94xx arcmsr ata_piix atp870u BusLogic cbc cciss cdrom ablk_helper 3w-9xxx 3w-xxxx cpqarray crc16 crc-t10dif cryptd DAC960 dc395x dmx3191d ds dtc ehci-hcd ehci-pci ext4 fat fdomain ff-memless firmware_class gdth gf128mul glue_helper hid hid-a4tech hid-apple hid-belkin hid-cherry hid-chicony hid-cypress hid-dummy hid-ezkey hid-generic hid-gyration hid-logitech hid-microsoft hid-monterey hid-petalynx hid-pl hid-samsung hid-sony hid-sunplus hpsa i82092 i82365 ide-cs ieee1394 imm in2000 initio ips iscsi_tcp jbd2 libahci libata libiscsi libiscsi_tcp libsas loop lpfc lrw mbcache megaraid megaraid_mbox megaraid_mm megaraid_sas mpt2sas mptbase mptfc mptsas mptscsih mptspi NCR53c406a ncr53c8xx ohci1394 ohci-hcd parport pas16 pata_ali pata_amd pata_artop pata_atiixp pata_cmd64x pata_cs5520 pata_cs5530 pata_cs5535 pata_cypress pata_efar pata_hpt366 pata_hpt37x pata_hpt3x2n pata_hpt3x3 pata_isapnp pata_it8213 pata_it821x pata_jmicron pata_legacy pata_marvell pata_mpiix pata_netcell pata_ns87410 pata_ns87415 pata_oldpiix pata_opti pata_optidma pata_pcmcia pata_pdc2027x pata_pdc202xx_old pata_platform pata_qdi pata_radisys pata_rz1000 pata_sc1200 pata_serverworks pata_sil680 pata_sis pata_sl82c105 pata_triflex pata_via pci2000 pci2220i pcmcia pcmcia_core pcmcia_rsrc pd6729 pdc_adma psi240i qla1280 qla2xxx qlogicfas qlogicfc qlogicisp qlogicpti raid_class sata_inic162x sata_mv sata_nv sata_promise sata_qstor sata_sil sata_sil24 sata_sis sata_svw sata_sx4 sata_uli sata_via sata_vsc sbp2 scsi_mod scsi_transport_fc scsi_transport_iscsi scsi_transport_sas scsi_transport_spi sd_mod seagate sg sha256_generic sim710 sl811-hcd uhci uhci-hcd ultrastor usbcore usbhid usb-ohci usb-storage vfat wd7000 xhci-hcd xhci-plat squashfs sr_mod sx8 sym53c416 sym53c8xx t128 tcic u14-34f xts ecb md5 ecryptfs yenta_socket drm drm_kms_helper i915 radeon nouveau ext3"

这里的相关模块,可能使后面执行的mkinitcpio报错,可以忽略。

把大约56行的HOOKS改成如下行:
HOOKS="base modconf autodetect udev block filesystems keyboard fsck"
主要是把modconf提到udev前面。

开始制作initramfs,执行mkinitcpio  -p linux,如下所示:

[root@isoft max]# mkinitcpio  -p linux
==> Building image from preset: /etc/mkinitcpio.d/linux.preset: 'default'
  -> -k /boot/vmlinuz-linux -c /etc/mkinitcpio.conf -g /boot/initramfs-linux.img
==> Starting build: 4.1.2-1-ARCH
  -> Running build hook: [base]
  -> Running build hook: [modconf]
  -> Running build hook: [udev]
  -> Running build hook: [plymouth]
  -> Running build hook: [autodetect]
  -> Running build hook: [block]
  -> Running build hook: [filesystems]
  -> Running build hook: [keyboard]
  -> Running build hook: [fsck]
==> Generating module dependencies
==> Creating gzip initcpio image: /boot/initramfs-linux.img
==> Image generation successful
==> Building image from preset: /etc/mkinitcpio.d/linux.preset: 'fallback'
  -> -k /boot/vmlinuz-linux -c /etc/mkinitcpio.conf -g /boot/initramfs-linux-fallback.img -S autodetecti
==> Starting build: 4.1.2-1-ARCH
  -> Running build hook: [base]
  -> Running build hook: [modconf]
  -> Running build hook: [udev]
  -> Running build hook: [plymouth]
  -> Running build hook: [autodetect]
  -> Running build hook: [block]
  -> Running build hook: [filesystems]
  -> Running build hook: [keyboard]
  -> Running build hook: [fsck]
==> Generating module dependencies
==> Creating gzip initcpio image: /boot/initramfs-linux-fallback.img
==> Image generation successful
[root@isoft max]#

这样就算基本做完了。

第六步:重启系统验证

ctrl+d                                       #退出chroot环境,当然你也可以执行 "exit"。

重启物理机操作系统,设置从U盘启动。有两种方法:
1,使用快捷键:
因不同品牌机器,所使用的快捷键不同,可以在引导时多留意下屏幕输出,一般来说,会有类似如下输出:
F12 boot menu
按完F12快捷键后,会显示类似如下几个选项:
Hard Drive
USB StorageDevice
CD/DVD/CD-RWDevice
Network
选择“USB Storage Device”回车即可;不同机器针对 U 盘显示的信息可能不一样,可能是 U 盘的品牌名称或其它自定义信息等,以实际显示为准。
利用上下键选择并回车后,即可引导U盘系统。
惹您的机器引导信息中未显示相关引导信息,可以尝试按F11,F9,ESC等,不同的计算机,也许不一样,您也可以搜索下相关计算机厂商官网或产品手册。

2,配置BIOS优先引导方式
若利用快捷键,在保证U盘系统没问题的情况下,还不能正常从U盘引导,有可能是您的电脑BIOS版本较新导致。可以尝试如下方法(以下以联想Thinkpad S1 Yoga 超级本为例):

l  进入 BIOS 界面
   按"F12"进入系统引导界面,再按 TAB 键,选择"Setup",进入"ThinkPad
setup",即"BIOS"界面。
l  恢复出厂设置
   按右键头键"→",选择"Startup",如下图所示:



   默认"UEFI/LegacyBoot"为"UEFI Only",且不能更改。
按"F9",恢复默认配置,此时即可进行此项修改.
重新定位到"Startup",配置"UEFI/Legacy Boot"为"Both","-UEFI/Legacy Boot Priority"为"LegacyFirst"。

按"F10",保存退出,再次进行引导:
退出 BIOS 后会自动重启机器,再次按"F12"或相关快捷键,选择带有U盘相关标识项,进行引导即可进入您自己制作的U盘系统了。

       启动成功,简单的迁移完成;亲这只是把系统简单的“移”到U盘,本身还保存着系统的原貌,你可以根据自己的想法来改变它。那如果你需要展示你的创意,就来吧。发给院校的样盘,那是普华教育版移动办公桌结构,具备多分区、定制工具,无痕启动,和某种程度的防破解技术。你会怎样玩!

       当然,经过一段时间观察,发现有些同学按照此文档,可以成功引导自己做的系统,有些不可以,其中缘由,想必是很复杂的。根据经验,可以从如下方面进行排查:

       A .  硬件得支持,即 你的U盘兼容性要好;
      
       B . 其次,针对有些机器,需要U盘的相关分区要做成可启动标志(本文未提及,您可以亲自搜下)。

       C . 在启动的时候,发现引导一段时间后,“挂”那不动了,可以通过如下方式把启动的详细过程输出到屏幕,根据错误进行排查,或发给我们,以帮助您排查相关问题。

             1> : 重启引导计算机,在出现grub菜单时,按 "e" ,进入编辑模式,利用上下键定位到 "linux   /boot/vmlinuz-linux ……"这一行尾,把 "loglevel=1"中的 "1"换成 "6",并删除 "quiet splash " 。
            
            2> : 按 "Ctrl - X" 或 F10进行引导。
     
            3> :引导的过程会输出每一步的详细日志,根据日志即可进行相关故障排查。



3. 啥问题(FAQ)

你是不是遇到了一下状况没法进行下去了。

1.拷贝系统文件时出现无法拷贝的问题。

  例如拷贝 usr 目录

  解决方法:

  cp  -arf   /usr /(your_Udisk_dir)

不仅“man”、“info”可以求解,还有互联网……

2.  sys dev proc tmp 等目录无法拷贝

  因为sys dev proc tmp mnt 目录为系统挂载目录。
  即开机后有系统挂载相关设备到此目录中,所以这个几个目录在系统没启动时,实际上是一个空目录。

  你只需手工创建这几个目录即可 (命令提示  mkdir )
  但任然需要注意的是,每个目录的真实选权限。
  如何查看目录的权限:

  $ls-l /

  如下

dr-xr-xr-x     2 root wheel      1  5 26 16:58 home/
dr-xr-xr-x     2 root wheel      1  5 26 16:58 net/
drwxrwxr-x     3 root wheel    102  1 28 23:13 opt/

3.chroot 是什么

怎么用?看链接:
https://wiki.archlinux.org/index.php/Change_Root_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)
链接没法点自行google/baidu


4.这么简单就完成了,没难度怎么办!

  当然不能这么轻松,你的工作刚刚开始,得尝试着将你装在U盘中的系统精简,精简,当然是要依据你的整体业务应用规划来实现,例如你的业务设计中,就是需要火狐浏览器以及对应插件,那就配置好;又或许需要一款Office来辅助工作,金山还是永中,亦或就是某款开源Office。当然,精简吗,可先从不需要的应用开始裁减(卸载),墙纸桌面啥的,那是你的脸面。重要的是不要忘了,互联网+的时代,那些云计算、大数据或许都是浮云,但这种发展又怎会离开现实技术支撑,你对服务器、集群还有虚拟化啥的,应该不会陌生了。考虑过这些技术对于“大数据互联网”体系的价值吗?那你构想的业务应用,会怎样体现这些技术特点哪?亦或你还为此设计了一个客户端应用来调取这些数据,LiveU中你来定制好吧,也许他只是一个特定网页应用,但本真中不失畅想。

5.有什么可以了解学习过程?

多装几个不同的发行版Linux,到你的物理机上。

不是一机装一个,是装个N多系统试试看。

也可以玩玩 Linux LFS 感受下。


风险。。
        注意不要把你自己的机器数据搞坏了。。
        单独弄块硬盘来做这件事情也是极好的。





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|“华梦“全国大学生开源软件技术创意大赛

GMT+8, 2018-6-22 16:54 , Processed in 0.062438 second(s), 21 queries .

Powered by Discuz! X2.5

“华梦“全国大学生开源软件技术创意大赛

回顶部