加入收藏 | 设为首页 | 会员中心 | 我要投稿 吕梁站长网 (https://www.0358zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 资源网站 > 空间 > 正文

Linux 竟然如此强大!能当主力,能入虚拟机,还能随时打包带走。。。

发布时间:2018-09-07 18:24:12 所属栏目:空间 来源:佚名
导读:9月15日技术沙龙 | 如何将智能化和运维工作相结合,实现智能运维! 这里介绍一下自己管理自己的Linux桌面的一点经验吧,我觉得还是有不少可取之处的。先来说一下大多数人管理Linux桌面的方法有哪些不方便的地方吧: 买新电脑了,又得在新电脑上安装Linux,

第一个要注意的事情是,大家在填写fstab的时候,通常喜欢在fs那一列填写类似/dev/sda4或者UUID=d5acc217-d524-4a2d-a937-bad945a047b2,而在这里这样是不行的,这里我们填写的是形如/dev/disk/by-label/linux这样的东西。也就是说,我们的fstab里面是通过分区的Label来找分区的。这么做的原因是,我们希望我们的rootfs不光能在这台机器上启动,还希望它能在虚拟机的环境中,或者当我们把rootfs打包带走同步到别的机器上的时候,也能正常启动。在这台机器上rootfs所在的分区叫做/dev/sda4,在别的机器上或者虚拟机里就不一定还叫/dev/sda4了。但是我们只要遵守自己的命名规则,所有机器上的这些分区我们都取相同的Label,那么我们的fstab就是放之四海而皆准的,不需要为不同的环境而更改。

第二个需要注意的问题是,不要填写rootfs的条目。这种做法跟通常发行版或者其他用户的默认做法是非常不相同的。为了理解这一点,先来说说Linux系统的启动过程。通常情况下,Linux启动的时候,首先由bootloader把内核装载到内存,并向内核传递参数告诉内核rootfs的位置。接下来内核就会根据传递的参数,以只读方式挂载rootfs,并执行rootfs中的init程序。init程序会调用相应的初始化程序执行各种初始化操作。其中一项初始化操作就是根据fstab的配置,来重新以读写方式挂载rootfs,并且挂载fstab里面配置的其他各个分区到指定位置。明白了Linux启动的过程,我们就知道,fstab里面的rootfs那一行其实不是必须的。删掉了rootfs那一行,我们只需要通过修改bootloader传递给内核的参数,就可以告诉内核直接以读写而不是只读的方式挂载rootfs。

那么,我们在写fstab的时候不写rootfs那一项有啥好处呢?好处就是,我们不仅希望我们的系统能在裸机上用,还希望我们的系统能在虚拟机上用。在下文设置qemu虚拟机的时候,我们会以virtfs的方式把我们的子卷传递给虚拟机,这个时候rootfs就已经不再是/dev/disk/by-label/linux了,如果我们把rootfs的挂载方式硬编码到fstab里面,那么会导致init程序的失败,进而无法启动。

另外有一点值得一提的小技巧是,很多时候我们还有别的一些个分区想要自动挂载。问题在于,这些分区在虚拟机环境中,并不一定是存在的,这就会导致启动的时候由于无法挂载而启动失败。其实系统的设计者早就考虑到这个问题了。如果你不希望fstab中的某些条目自动挂载,在选项里面增加noauto即可。如果你希望一些条目自动挂载,但是这些条目不是那么重要,即使挂载失败也不希望这些条目导致启动失败,可以在选项中增加nofail。这两个选项真的是给我们的系统管理工作提供了非常大的方便。比如说我们可能会在fstab中增加/dev/disk/by-label/swap的条目,以便开机自动将这个分区设置为交换分区供系统使用。然而后面我们会看到,我们设置虚拟机的时候,这个分区在虚拟机环境下,并不一定是可用的。这种情况下,我们希望系统在找不到这个分区的时候直接忽略错误不用swap便是,而不是报错拒绝启动。

说了这么多,直接贴一个fstab的例子好了:

  1. tmpfs                   /tmp    tmpfs   defaults    0 0 
  2. /dev/disk/by-label/swap none    swap    defaults,nofail 0 0 

bootloader

再来说说启动管理器,这里作者推荐的启动管理器是refind,安装教程官网有,在此不赘述。这里只讲一下启动项怎么写。先贴示例代码:

Linux 竟然如此强大!能当主力,能入虚拟机,还能随时打包带走。。。

其中第三行的volume用来指定内核存放的分区,此分区可以通过多种方式来指定,比如通过分区的GUID,但是对我们来说最重要的是可以通过文件系统的Label来指定。我们的rootfs分区Label是”linux”,所以这一行写作volume linux。

接下来就是指定内核位置、内核参数跟initramfs的位置了。其中loader用来指定内核位置,options用来指定内核参数,initrd则用来指定initramfs的位置。示例中的是Archlinux系统,内核是archlinux子卷中的boot/vmlinuz-linux文件,所以写作loader archlinux/boot/vmlinuz-linux。类似,initrd那一行则写作initrd archlinux/boot/initramfs-linux.img。至于内核参数,root=/dev/disk/by-label/linux告诉内核我们的rootfs所在的分区,rootflags=subvol=archlinux告诉内核挂载名为archlinux的子卷,rw则告诉内核以读写方式挂载。对于Ubuntu系统,这三行应该写作:

  1. loader ubuntu/vmlinuz 
  2. options "root=/dev/disk/by-label/linux rootflags=subvol=ubuntu rw" 
  3. initrd ubuntu/initrd.img 

细心的读者可能已经发现,我们的refind的配置文件中在指定分区的时候用的全是他们的Label,这就保证了这个配置文件的普适性,换台电脑,只要你用同样的管理方式,同样的命名习惯,配置文件里面的东西动都不用动,直接拷贝过去就行。

系统的备份与恢复以及快照的应用

由于使用了btrfs的动态卷,所以备份恢复工作做起来非常简单。备份系统只需要创建快照即可:

  1. cd /mnt 
  2. btrfs subvolume snapshot archlinux backup 

(编辑:吕梁站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读