无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 12457|回复: 57
打印 上一主题 下一主题

[原创] Debian Linux buster overlay无盘桌面实践

    [复制链接]
跳转到指定楼层
1#
发表于 2019-8-17 11:01:28 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
本帖最后由 友联电脑 于 2019-8-30 23:19 编辑

   Linux无盘启动,有各种各样的方式,如nfs,iscsi等等。这些方式,在使用的时候,都高度依赖相应服务,不能断线,否则客户机马上就会进入死机模式。还有客户机在使用的过程中,对系统的读写,增删,都会通过网络将数据回写到相应的服务器上,再者就是多人同时使用下,能否很好的满足以上工作。
  经过段时间的了解,学习,参考相关资料,决定采用overlay作为客户机的根文件系统。overlay它是一个堆叠虚拟文件系统,能将多个目录合并堆叠成成一个最终目录,又能将只读,可写等划分开来,用它作为根文件系统,再好不过了。实践证明,客户机启动后,没有因为读写及权限而产生各种问题,客户机用起来,就像是本地有盘一样,可以增删,重启后又恢复原样。如果需要保存相关操作数据,应另行挂载各类存储设备。总体看来,overlay真的是个不错的选择。关于它的具体要细节,网上搜搜到处都是,在此就更多的解释。
  好了,言归正传上图

      这是在系统启动过程中的一个截图,加载内核及映像的时间太快,一晃而过,所以先略过
  
  登录系统

  
  GNOME桌面应用软件,稍加清理,将不用的软件卸载掉,加上几个用的比较顺手的软件包

  文件系统载加情况,也上几张图


     好了,到这也差不多了,最后是IPXE的启动菜单,#!ipxe


  这样的客户机,如果跑点服务,容器,虚拟化什么的,也是一个不错的选择,计算之类的那就再适合不过了。因为它启动后就是一个RAMOS,独立性很强。
  对了,还有个想调整又没有找到办法的问题,欢迎提供宝贵方法,在此先谢谢了。
  问题是这样的,通过网络拉取的基础映像系统,不能大于客户机物理内存的50%,会报内存不足而无法拉取
 

  谢谢          
190822 
经过坛里几天的对此贴的交流,发现有兴趣的寥寥无几,真正动手的更少,某些东西更说不到关键点上,不管怎样,都得感谢大家的关注与热情回复,所以本人将Linux Debian 发行版发行代号buster的无盘启动,其启动方式为,经由http加载基础与虚拟内存文件系统组成联合文件系统(overlay)的启动方法,自定义脚本贴出来,希望对大家有点帮助。谢谢



  1. #Write by youlianpc.com
  2. #to use overlay with get squashfs from http
  3. #Use general mapping functions
  4. . /scripts/functions
  5. ipconfig `ifconfig -a|head -n 1|awk '{print $1}'`
  6. #Load related kernel modules
  7. modprobe overlay
  8. modprobe squashfs
  9. modprobe tmpfs
  10. #Setup overlay base directory
  11. mkdir -p /overlay
  12. mount -t tmpfs tmpfs /overlay -o size=90%
  13. #Setup overlay mapping directories
  14. mkdir -p /overlay/lower
  15. mkdir -p /overlay/upper
  16. mkdir -p /overlay/work
  17. #Recieve squashfs image and mount
  18. for x in $(cat /proc/cmdline); do
  19.     case $x in
  20.         sqimage=*)
  21.     esac
  22. done
  23. for x in $(cat /proc/cmdline); do
  24.     case $x in
  25.         squrl=*)
  26.     esac
  27. done
  28. echo "The Squashfs Root Files is $squrl/$sqimage"
  29. echo "Please wait wait wait loading !!!"
  30. wget $squrl/$sqimage
  31. if [ $? != 0 ] ; then
  32.   msg1="Get the  squashfs base image failed. Please change a small image or add physics memory.  "
  33.   msg2="The system will reboot on 10s "
  34.   echo -e "\033[1;41;33m ${msg1} \033[0m"
  35.   echo -e "\033[1;41;33m ${msg2} \033[0m"
  36.   sleep 10
  37.   reboot -f
  38. fi
  39. mount -t squashfs $sqimage /overlay/lower
  40. #Mount overlay
  41. mount -t overlay overlay /root -o lowerdir=/overlay/lower,upperdir=/overlay/upper,workdir=/overlay/work
复制代码

[/code]

外网直接启动效果
http://bbs.wuyou.net/forum.php?m ... ge%3D1&mobile=2


基础映像需要小于物理内存50%的问题,已经找到原因,顺利解决了。回过头来看,真是粗心大意。原来是目标位置空间不足的问题引起来的,真是”灯下黑“

评分

参与人数 2无忧币 +10 收起 理由
freesoft00 + 5
cckp + 5 很给力!

查看全部评分

58#
发表于 2020-2-29 18:57:01 | 只看该作者
回复

使用道具 举报

57#
发表于 2020-2-15 21:21:22 | 只看该作者
厉害
回复

使用道具 举报

56#
 楼主| 发表于 2019-8-29 00:05:48 来自手机 | 只看该作者
ls68057121 发表于 2019-8-28 17:36
哈哈。云里雾里

外网直接启动,够直观的
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=416077&extra=page%3D1&mobile=2  
回复

使用道具 举报

55#
发表于 2019-8-28 17:36:48 来自手机 | 只看该作者
哈哈。云里雾里

点评

外网直接启动,够直观的 http://bbs.wuyou.net/forum.php?mod=viewthread&tid=416077&extra=page%3D1&mobile=2  详情 回复 发表于 2019-8-29 00:05
回复

使用道具 举报

54#
发表于 2019-8-24 10:57:42 | 只看该作者
linux 系统偶尔玩玩
回复

使用道具 举报

53#
 楼主| 发表于 2019-8-24 10:27:09 | 只看该作者
江南一根葱 发表于 2019-8-23 12:56
还没试过,不过作为新手,可能我还会不知道这脚本加在哪

说的实在,这个脚本放在内核映像的脚本目录,或者生成映像工具的脚本目录下
回复

使用道具 举报

52#
发表于 2019-8-23 12:56:19 | 只看该作者
友联电脑 发表于 2019-8-22 21:02
不谢,启动参数是制定的,未经测试,不是也不能乱写的

还没试过,不过作为新手,可能我还会不知道这脚本加在哪

点评

说的实在,这个脚本放在内核映像的脚本目录,或者生成映像工具的脚本目录下  详情 回复 发表于 2019-8-24 10:27
回复

使用道具 举报

51#
 楼主| 发表于 2019-8-22 21:02:13 | 只看该作者
江南一根葱 发表于 2019-8-22 17:59
多谢多谢,我研究研究,

不谢,启动参数是制定的,未经测试,不是也不能乱写的

点评

还没试过,不过作为新手,可能我还会不知道这脚本加在哪  详情 回复 发表于 2019-8-23 12:56
回复

使用道具 举报

50#
发表于 2019-8-22 17:59:09 | 只看该作者
友联电脑 发表于 2019-8-22 15:19
贴子已更新,上面有你想要的,脚本就是关键启动过程

多谢多谢,我研究研究,

点评

不谢,启动参数是制定的,未经测试,不是也不能乱写的  详情 回复 发表于 2019-8-22 21:02
回复

使用道具 举报

49#
 楼主| 发表于 2019-8-22 15:19:31 | 只看该作者
本帖最后由 友联电脑 于 2019-8-22 15:20 编辑
江南一根葱 发表于 2019-8-21 22:34
高手们有没现成解压可用的包地址给研究下


贴子已更新,上面有你想要的,脚本就是关键启动过程

点评

多谢多谢,我研究研究,  详情 回复 发表于 2019-8-22 17:59
回复

使用道具 举报

48#
 楼主| 发表于 2019-8-21 23:17:35 | 只看该作者
江南一根葱 发表于 2019-8-21 22:34
高手们有没现成解压可用的包地址给研究下

有兴趣一起讨论,改天有空,我发过问启动过程及相关资源上来,还有一些问题有待解决中
回复

使用道具 举报

47#
 楼主| 发表于 2019-8-21 23:10:29 | 只看该作者
hkkitlee 发表于 2019-8-21 22:56
如何加載?!?!我腳本都寫了給你,腳本就清楚說明了如何加載了......

既然是赘言,那我就不多說了, ...

也许吧,你的方法也许我还没有参透,并不在我已知范围之内,我只有去多看,多读,多想内核映像的各种脚本并再写点,好好学习,天天向上!!!
回复

使用道具 举报

46#
 楼主| 发表于 2019-8-21 22:58:46 | 只看该作者
hkkitlee 发表于 2019-8-21 22:33
我剛寫了的過份「基礎」,以為是你需要了解的「基礎加載」

我理解你所需要的啟動方式,是一個「可離線 ...

我剛寫了的過份「基礎」,以為是你需要了解的「基礎加載」

我理解你所需要的啟動方式,是一個「可離線,可讀寫的根目錄」而已。还一点,方便切换


根目錄中只需預安裝你需要的docker,虛擬化;再壓成squashfs就可以啟動。

关于docker,虚拟化等,并不是你想像中的那么简单,区区安装一下就可以,说的也太轻巧了,实践过你就知道 了有哪些难处,比如,物理网卡,终端不同,网卡的命名就不同,,虚拟化管理也是一个问题,如何能简洁又有效的管理
回复

使用道具 举报

45#
发表于 2019-8-21 22:56:35 | 只看该作者
本帖最后由 hkkitlee 于 2019-8-22 06:51 编辑
友联电脑 发表于 2019-8-21 22:46
Live :經加載的網卡下載squashfs,解壓到內存並以「overlay方式作為可讀寫根目錄」。
Installed:經加載 ...


如何加載?!?!我腳本都寫了給你,腳本就清楚說明了如何加載了......

既然都是赘言,那我就不多說了,祝你早出成品。

点评

也许吧,你的方法也许我还没有参透,并不在我已知范围之内,我只有去多看,多读,多想内核映像的各种脚本并再写点,好好学习,天天向上!!!  详情 回复 发表于 2019-8-21 23:10
回复

使用道具 举报

44#
发表于 2019-8-21 22:56:35 | 只看该作者
友联电脑 发表于 2019-8-21 22:46
Live :經加載的網卡下載squashfs,解壓到內存並以「overlay方式作為可讀寫根目錄」。
Installed:經加載 ...

如何加載?!?!我腳本都寫了給你,腳本就清楚說明了如何加載了......

既然是赘言,那我就不多說了,祝你早出成品。
回复

使用道具 举报

43#
发表于 2019-8-21 22:56:23 | 只看该作者
友联电脑 发表于 2019-8-21 22:46
Live :經加載的網卡下載squashfs,解壓到內存並以「overlay方式作為可讀寫根目錄」。
Installed:經加載 ...

如何加載?!?!我腳本都寫了給你,腳本就清楚說明了如何加載了......

既然是赘言,那我就不多說了,祝你早出成品。
回复

使用道具 举报

42#
 楼主| 发表于 2019-8-21 22:46:30 | 只看该作者
hkkitlee 发表于 2019-8-21 22:19
我理解的基礎加載:

你加載的3個文件,vmlinuz , initrd , squashfs

Live :經加載的網卡下載squashfs,解壓到內存並以「overlay方式作為可讀寫根目錄」。
Installed:經加載的硬碟讀取分區表。

这才是问题的关键,Live :經加載的網卡下載squashfs ,这个是如何载加的,是复制到内存,还是通NFS挂载,这才是关键中的关键,理论那些东西 都不需要赘言,

点评

如何加載?!?!我腳本都寫了給你,腳本就清楚說明了如何加載了...... 既然是赘言,那我就不多說了,祝你早出成品。  详情 回复 发表于 2019-8-21 22:56
如何加載?!?!我腳本都寫了給你,腳本就清楚說明了如何加載了...... 既然是赘言,那我就不多說了,祝你早出成品。  详情 回复 发表于 2019-8-21 22:56
如何加載?!?!我腳本都寫了給你,腳本就清楚說明了如何加載了...... 既然是赘言,那我就不多說了,祝你早出成品。  详情 回复 发表于 2019-8-21 22:56
回复

使用道具 举报

41#
发表于 2019-8-21 22:34:42 | 只看该作者
高手们有没现成解压可用的包地址给研究下

点评

贴子已更新,上面有你想要的  详情 回复 发表于 2019-8-22 15:19
有兴趣一起讨论,改天有空,我发过问启动过程及相关资源上来,还有一些问题有待解决中  详情 回复 发表于 2019-8-21 23:17
回复

使用道具 举报

40#
发表于 2019-8-21 22:33:42 | 只看该作者
友联电脑 发表于 2019-8-21 21:36
看样子,你还是不明白我在说什么。简单点讲,如果你要网启buster,服务器上要被用到的有哪些文件,不管 ...

我剛寫了的過份「基礎」,以為是你需要了解的「基礎加載」

我理解你所需要的啟動方式,是一個「可離線,可讀寫的根目錄」而已。
根目錄中只需預安裝你需要的docker,虛擬化;再壓成squashfs就可以啟動。

点评

我剛寫了的過份「基礎」,以為是你需要了解的「基礎加載」 我理解你所需要的啟動方式,是一個「可離線,可讀寫的根目錄」而已。还一点,方便切换 根目錄中只需預安裝你需要的docker,虛擬化;再壓成squashfs  详情 回复 发表于 2019-8-21 22:58
回复

使用道具 举报

39#
发表于 2019-8-21 22:19:11 | 只看该作者
友联电脑 发表于 2019-8-21 21:15
,可能超出你的想像了,fstab是空的,这有什么奇怪的,没有任何本地设备需要加载, ...

我理解的基礎加載:

你加載的3個文件,vmlinuz , initrd , squashfs

第一是加載核心,第二是下載initrd並解壓縮到內存。
initrd的角色是以「臨時的根目錄」的方式在內存給核心運作。當時連硬碟也「不能掛載」。
這是因為當時的核心只有很小量的驅動程式。其餘的驅動[如:sata/scsi/網卡等]是以存在initrd。

當核心加載了initrd的所需驅動後,核心會主動「卸載」initrd並釋放本來使用的內存空間。
再憑已加載的驅動:

Live :經加載的網卡下載squashfs,解壓到內存並以「overlay方式作為可讀寫根目錄」。
Installed:經加載的硬碟讀取分區表。

以上兩個已設好根目錄的系統完成後。就是尋找第一支「用戶級別的程式」,即sysV / systemd。
這兩個初始化完成後。就是見到的xorg / terminal。


最詳細可參考kernel.org或其他發行文件。

点评

Live :經加載的網卡下載squashfs,解壓到內存並以「overlay方式作為可讀寫根目錄」。 Installed:經加載的硬碟讀取分區表。 这才是问题的关键,Live :經加載的網卡下載squashfs ,这个是如何载加的,是复制到内存  详情 回复 发表于 2019-8-21 22:46
回复

使用道具 举报

38#
 楼主| 发表于 2019-8-21 21:36:42 | 只看该作者
本帖最后由 友联电脑 于 2019-8-21 21:55 编辑
hkkitlee 发表于 2019-8-21 21:24
跨網不跨網,只在乎你腳本${boot-server}是個可解釋domain,跟本沒分內外網。做好port forwarding 就可以了 ...


看样子,你还是不明白我在说什么。简单点讲,如果你要网启buster,服务器上要被用到的有哪些文件,不管是解包,还是不解包的,是直接加载iso文件,还是squashfs,通过何种方式在何时加载,这就是我想分析的启动过程

如nfs方式,一般是内核和映像启动后,通过nfs挂载squashfs,然后再组成联合文件系统,此时当nfs数据中断,系统就会随之死机,而且客户端一多,给服务器的io造成不小的压力,不过这样启动是最快的。
其次是iso整盘加载,这样如果基础系统稍有修改,就得重新压制iso,启动时候,也会处于长时间的等待状态,加载完成后,像本机挂了光驱一样,也可脱机运行 
再次是将基础文件,直接打包到映像文件,以形成一次加载,直接启动的效果,不存在启动过程是需继续加载数据,此法也可脱机运行
以上两种可脱机运行的方法,都存在切换的麻烦

最后在启动的过程中通过http加载基础映像系统,组成联合文件系统,就是目前我尝试使用的方案,即可脱机,又可方便调整客户端系统,只要改下脚本的参数即可,方便多了

这些就是启动各种linux的方法大全,谢谢

点评

我剛寫了的過份「基礎」,以為是你需要了解的「基礎加載」 我理解你所需要的啟動方式,是一個「可離線,可讀寫的根目錄」而已。 根目錄中只需預安裝你需要的docker,虛擬化;再壓成squashfs就可以啟動。  详情 回复 发表于 2019-8-21 22:33
回复

使用道具 举报

37#
发表于 2019-8-21 21:24:31 | 只看该作者
本帖最后由 hkkitlee 于 2019-8-21 21:26 编辑

重覆刪除
回复

使用道具 举报

36#
发表于 2019-8-21 21:24:27 | 只看该作者
本帖最后由 hkkitlee 于 2019-8-21 21:31 编辑

跨網不跨網,只在乎你腳本${boot-server}是個可解釋domain,跟本沒分什麼內外網。做好port forwarding 就可以。客戶機有要求,伺服器能在正確的通道上回應。沒有特別。

只是下載系統文件的「方法」能不能跨得出。如果是iscsi之類就跨不出喇!這是「使用什麼方式來下載」的協議問題。

我寫給你的腳本,就是從我的copy出來給你的。

点评

看样子,你还是不明白我在说什么。简单点讲,如果你要网启buster,服务器上要被用到的有哪些文件,不管是解包,还是不解包的,是直接加载iso文件,还是squashfs,通过何种在何时加载,这就是我想分析的启动过程  详情 回复 发表于 2019-8-21 21:36
回复

使用道具 举报

35#
 楼主| 发表于 2019-8-21 21:15:35 | 只看该作者
本帖最后由 友联电脑 于 2019-8-21 21:29 编辑
hkkitlee 发表于 2019-8-21 20:45
fstab是空的?!?!我真的是無語了...
那你是怎麼設定使用overlay


,可能超出你的想像了,fstab是空的,这有什么奇怪的,没有任何本地设备需要加载,为什么有要fstab,跨不跨互联网,这个真的没什么,我只是想看下,如果你要启动buster,或者说你给我一个能跨网启动的脚本,我只是想看一下而已,真没有其它的。你能写,我就能告诉你启动过程,要不你说下我个作法的启动过程。

我说下,这样启动的好处

1,squashfs文件随意链接和压制,无需进一步打包加工
2,内核及映像文件都是同一个,不管启动哪个版本的
3,终端启动完成,就可脱机运行,

当然,如果是一些小型Linux,本身就是映像版本,直接启动映像就Ok的,这些根本用不着这样,像deepin,fedora,centos,ubuntu等等上G的大小,必须有一个加载基础系统的过程,这就是我想知道的,这就是我这样用的地方,呵呵

点评

我理解的基礎加載: 你加載的3個文件,vmlinuz , initrd , squashfs 第一是加載核心,第二是下載initrd並解壓縮到內存。 initrd的角色是以「臨時的根目錄」的方式在內存給核心運作。當時連硬碟也「不能掛載」  详情 回复 发表于 2019-8-21 22:19
回复

使用道具 举报

34#
发表于 2019-8-21 20:45:40 | 只看该作者
本帖最后由 hkkitlee 于 2019-8-21 21:15 编辑
友联电脑 发表于 2019-8-21 17:43
fstab是空的,什么也没有。可以说下你的启动过程吗?特别是squashfs的取得方式,还有,如果启动后断开 ...


fstab是空的?!?!我真的是無語了...
那你是怎麼設定使用overlay,難道是boot=overlay?這個核心參數好像不是表達這個意思...

系統都已在內存,當然可以斷網工作。
或者你參考我寫過的帖,我的啟動項目全都跨互聯網。全部都「不可能用網絡磁盤」。
腳本給了你,squashfs也是自己壓。也看不出你壓制方法有問題。

我的啟動:系統文件下載後就是獨立一部機器,與伺服再無關係;伺服下線、關機當然也可以。
與你最大分別應該是我沒有「再特別設定overlay」而已。

点评

,可能超出你的想像了,fstab是空的,这有什么奇怪的,没有任何本地设备需要加载,为什么有要fstab,跨不跨互联网,这个真的没什么,我只是想看下,如果你要启动buster,或者说你给我一个能跨网启  详情 回复 发表于 2019-8-21 21:15
回复

使用道具 举报

33#
 楼主| 发表于 2019-8-21 17:43:56 | 只看该作者
本帖最后由 友联电脑 于 2019-8-21 18:04 编辑
hkkitlee 发表于 2019-8-21 13:43
你誤會了。我是在說精簡iPXE的啟動腳本雙引導啟動;不是在說pxe server回報的架構可以雙啟動。

###i ...


fstab是空的,什么也没有。可以说下你的启动过程吗?特别是squashfs的取得方式,还有,如果启动后断开网络,系统可否正常运转,这很关键。

点评

fstab是空的?!?!我真的是無語了... 那你是怎麼設定使用overlay 系統都已在內存,當然可以斷網工作。 或者你參考我寫過的帖,我的啟動項目全都跨互聯網。全部都「不可能用網絡磁盤」。 腳本給了你,squashf  详情 回复 发表于 2019-8-21 20:45
回复

使用道具 举报

32#
 楼主| 发表于 2019-8-21 17:30:34 | 只看该作者
江南一根葱 发表于 2019-8-21 13:39
bios和efi去共用一个ipxe的jio本貌似有点杂乱,刚合并,我就在考虑分开。。

合并,将uefi和legacy引导菜单放在一起,真的没有必要,分开处理即简单又清爽,何乐而不为。我选择是从dhcp就开始分开,清爽多了
回复

使用道具 举报

31#
发表于 2019-8-21 14:28:30 | 只看该作者
本帖最后由 hkkitlee 于 2019-8-21 14:29 编辑
江南一根葱 发表于 2019-8-21 13:39
bios和efi去共用一个ipxe的jio本貌似有点杂乱,刚合并,我就在考虑分开。。


那就「感覺良好」就好了

我的出發點是:分開都是在寫一堆「差不多、重複」的代碼。必刪減降低體積與載入時間。
就是為了性能。
回复

使用道具 举报

30#
发表于 2019-8-21 13:43:41 | 只看该作者
本帖最后由 hkkitlee 于 2019-8-21 14:43 编辑
友联电脑 发表于 2019-8-21 12:07
PXE第一步引导时,服务器如何区分终端是什么方式启动,你在这个地方进行uefi和legacy的识别,会不会有点 ...


你誤會了。我是在說精簡iPXE的啟動腳本雙引導啟動;不是在說pxe server回報的架構可以雙啟動。

###iPXE腳本
一個腳本實現uefi/bios雙啟,減小了重疊的「啟動」代碼。

###dhcp-option
客機經dhcp-option回報自身架構給dhcp server,足以能判斷是什麼機器,減少不必要iPXE中「判斷式」代碼或「雙菜單」的出現。

回應你之前內存的問題:
可否看看你設的fstab。
其實我都頗為肯定是因為你「設定」overlay的問題,才導致你有必要內存是系統的兩倍。
或者你可以看看官網有範例參考。都是沒有你這個問題。
只是你當時說得太肯定,我又沒時間打字。

我的最小啟動是內存比系統影像大400MB;一樣是buster gnome,內存2.5g,核心連squashfs己有2.1G多

点评

fstab是空的,什么也没有。可以说下你的启动过程吗?特别是squashfs的取得方式,还有,如果启动后断开网络,系统可否正常运转,这很关键。  详情 回复 发表于 2019-8-21 17:43
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-5-2 23:43

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表