虚拟机中安装 debian 后扩展硬盘的问题

根分区大小不足的问题描述

最近,我在 vmware 中安装了 debian 10 系统。在安装时,我仅仅选择创建根分区与交换分区,总共使用了 20 GB 的磁盘空间。

安装完成后进行一系列的配置之后,我发现根分区剩下了不到 10 GB 左右,我的家目录下面就有 5 GB 左右的个人数据,而且还只放了一部分。

我的解决方案

根据我的经验,根分区 20 GB 大小其实已经可以满足常规的使用了。这里我的根分区可用空间不足的问题在于我没有将 /home 挂载为单独的分区,而 /home 中常常会存储很多数据,这就造成根分区的大小不足。解决方法其实也很简单,我只需要重新创建分区然后将诸如 /home、/usr 这些目录挂载到独立的分区上去就可以了。

下面是我的执行步骤:

  1. 重新创建一块虚拟硬盘文件,将虚拟硬盘挂载到 debian 10 中
  2. 在 debian 10 中使用 fdisk 来创建分区,成功后格式化分区
  3. 修改 debian 10 的 /ec/fstab 文件以适应新的分区配置
  4. 执行 mount -a 命令挂载新添加的分区

如何获取分区的 uuid ?

执行第 3 步的时候我遇到了一个问题——如何获取分区的 uuid?在我的印象中好像可以通过 blkid 这个命令来查看,一试之下发现确实可以获取到,这个问题得到了解决。

其实在 /etc/fstab 中也可以直接使用分区的设备文件,如 /dev/sdb1 等,这也是能够正常工作的,不过我想尝试下使用 uuid 的方式,就没有使用分区的设备文件来表示分区。

未复制 /usr 目录下的文件到新挂载分区导致命令不可用

执行了上述步骤之后我发现许多命令都不能使用了,只要一执行便会报无法找到命令的错误,这时我才意识到我没有将 /usr 中的内容拷贝到新的分区中,导致 /usr 目录下放的命令都无法使用了。

这要怎么解决呢?即便我强制关闭虚拟机,/etc/fstab 中的内容不进行修改,上面的问题将继续存在,而我要如何修改 /etc/fstab 这个文件的内容呢?

我想我可以通过引导 iso 文件进入 live 系统来完成,可我不知道如何进入 iso 引导项。我又想到了我可以在虚拟机的配置中将新添加的虚拟硬盘移除的方法。在系统初始化的过程中根据 /etc/fstab 文件中的内容挂载新添加的分区时就会失败,这样 /usr 中的内容就使用的是根分区中的了。

按照上面的方法操作之后果然有了点眉目,开机后进入了 initramfs,根分区被挂载到了 /root 目录。我直接修改 /root/etc/fstab 文件。强制写入修改内容时却发现写入失败,文件系统被挂载为了只读状态,无法写入。我切换到根目录下,通过 remout 来将 /root 分区重新挂载为 rw ,这之后就能够写入修改到文件了。我注释掉了 /etc/fstab 文件中挂载新分区的行,保存后重启系统,这次成功进入到系统中了。

cp -rf 导致文件的属性被修改

进入系统后,我将 /usr 将使用的新的分区挂载到 /media 目录下,执行 cp -rf 命令来复制 /usr 目录下的所有文件。复制完成后我重新修改了 /etc/fstab,然后继续执行 mount -a 命令。这之后我发现使用 sudo 命令时会报一个错误,错误信息如下:

sudo: ./sudo must be owned by uid 0 and have the setuid bit set

这让我意识到在复制过程中 sudo 文件的一些属性被修改了,suid 位丢失了。一个具体的实例如下:

[longyu@debian-10:10:38:42] uml $ cp -rf /usr/bin/sudo ./
[longyu@debian-10:10:52:51] uml $ ls -lh ./sudo
-rwxr-xr-x 1 longyu longyu 154K 11月  9 10:52 ./sudo
[longyu@debian-10:10:52:54] uml $ ls -lh /usr/bin/sudo
-rwsr-xr-x 1 root root 154K 10月 12 21:49 /usr/bin/sudo

从上面的输出中可以看出,我使用普通用户执行 sudo ,复制得到的 sudo 命令的用户与属组变为了普通用户,同时 suid 位丢失了,这样我就无法使用复制得到的 sudo 命令来获取到 root 权限。

上面的问题可以通过给 cp 命令添加 -a 参数来解决。搞到这里我在网上搜索了下复制 /usr 目录中文件的方法,发现我最好通过 live 来在分区不被使用的情况下进行复制,这样我就搜索了下如何在 vmware 中从 iso 引导系统。

从 iso 文件引导系统

搜索发现我只需要在开机的选项中选择打开电源时进入固件就能够进入 bios ,这之后修改 bios 中的引导顺序将 CD-ROM Drive 放到第一,保存退出就能够通过 iso 引导系统。进入 live 后挂载相关的分区,完成拷贝就可以了。

完成了上面的配置之后在下一次开机的时候还需要将引导顺序修改回来,与上面的操作类似。再次进入到系统后,一切终于恢复了正常。

总结

尽管最后我解决了扩展硬盘的问题,但是其中的过程有点太过曲折,耗费的时间也超出了我的预料。我想我对整个系统工作的原理还是不太清楚,需要更深入的理解。另一方面我或许应该在做之前先将关键步骤列出来,并对关键步骤进行检查以避免其它的错误,这样之后再次操作或许就没有这么多的问题了!这一点我需要反思!

你可能感兴趣的:(Linux,虚拟中中给,linux扩展硬盘,获取分区的,uuid,vmware,从,iso,引导,cp,-rf,复制时文件属性的变化)