[Linux]swap分区被误删除导致系统启动失败的解决方案
[Linux]swap分区被误删除导致系统启动失败的解决方案
问题阐述
经过某种奇妙的操作后把系统的swap分区整没了,然后造成经常性的启动失败
Dependency failed for /dev/disk/by-uuid/8bc79a31-f488-46a9-bf5b-3973ab39bd8
Dependency failed for Swaps
解决方案
网上博客应该蛮多的,本文主要用于个人知识补充。个人觉得学linux遇到问题不应该只是复制粘贴博客上的命令来解决问题,更应该了解那些指令背后逻辑以及出现问题的原因。
- 使用free -m 检查 内存和交换空间
free -m
正常的情况如下图所示
如果swap被删除那么会变成0
如果要了解检查swap空间的其他命令可以看这篇资料
- 使用dd命令创建swap分区
dd if=/dev/zero of=/swapfile bs=1M count=8192
关于dd命令参数表可以参考这篇资料
参数 | 意义 |
---|---|
if | 输入文件名,默认为标准输入。即指定源文件 |
of | 输出文件名,默认为标准输出。即指定目的文件 |
bs | 同时设置读入/输出的块大小为bytes个字节 |
count | 仅拷贝blocks个块,块大小等于ibs指定的字节数 |
cout大小一般设置内存大小两倍或者和内存大小一样(不过现在内存越来越大了,swap分区的需求其实不必那么大,可以参考一下swap分区的意义)
关于/dev/zero
/dev/zero 是linux中的虚拟设备,可以参考这篇资料
linux有这么几个虚拟设备:Linux中的虚拟设备/dev/null、/dev/zero、/dev/random和/dev/urandom 各自有着不同的用途
虚拟设备 | 常见用途 |
---|---|
/dev/null | 空”设备,也有人称它为黑洞。任何输入到这个“设备”的数据都将被直接丢弃。最常用的用法是把不需要的输出重定向到这个文件。 |
/dev/zero | “零”设备,可以无限的提供空字符(0x00,ASCII代码NUL)。常用来生成一个特定大小的文件。 |
dev/random和/dev/urandom | 随机数设备,提供不间断的随机字节流。二者的区别是/dev/random产生随机数据依赖系统中断,当系统中断不足时,/dev/random设备会“挂起”,因而产生数据速度较慢,但随机性好;/dev/urandom不依赖系统中断,数据产生速度快,但随机性较低。 |
- 使用mkswap设置swap分区
mkswap /swapfile
- 使用swapon启用swap分区
swapon /swapfile
- 保存设置使其永久生效
进入/etc/fstab 添加下面这一行设置
/swapfile swap swap defaults 0 0
fstab是干嘛的呢?
fstab文件可用于定义磁盘分区,各种其他块设备或远程文件系统应如何装入文件系统。 当系统启动的时候,系统会自动地从这个文件读取信息,并且会自动将此文件中指定的文件系统挂载到指定的目录
个人推测(linux还没学明白,可能有误区),swap分区丢失造成经常性启动失败的很大一个原因就是启动的时候fstab操作swap分区的时候遇到的错误,因此就报错了
在这之前好像还有一步,如果到这里没有成功可以参考这篇博客讲的很详细
进一步了解swap分区意义
那么解决的了问题之后,我想应当去了解一下swap分区的作用和他存在的意义
参考archlinux wiki的这一页面
下面大部分文字摘录于这个wiki页面,建议直接浏览页面
什么是swap(交换)
Linux 将物理内存分为内存段,叫做页面。交换是指内存页面被复制到预先设定好的硬盘空间(叫做交换空间)的过程,目的是释放这份内存页面。物理内存和交换空间的总大小是可用的虚拟内存的总量。swap是由Linux内核和用户空间实用程序(来自于 util-linux 软件包)提供支持的。
swap空间
交换空间通常是一个磁盘分区,但是也可以是一个文件。用户可以在安装 Arch Linux 的时候创建交换空间,或者在安装后的任何时间建立交换空间。交换空间可用于两个目的,将虚拟内存扩大到超过已安装的物理内存的容量,也可用于 suspend-to-disk 支持。
使用swap扩展您的虚拟内存是否有好处取决与您的物理内存。如果物理内存不足以支撑您日常使用全部的程序的话(体现在日常使用时内存满了导致的卡顿,死机),使用swap也许会对您有些帮助。这样可以避免 out of memory conditions,Linux内核OOM Killer机制将尝试通过杀进程的方式来自动释放内存。如果您想让虚拟内存足够使用,请添加相应的差值(或更多)作为交换空间。
启用交换的最大缺点是性能较低,因此,启用swap是个人喜好问题:当物理内存用完时,有些人更喜欢杀死程序而不是启用交换,而另一些人更喜欢启用交换和较慢的系统。
当然也有一些方法可以优化swap分区的性能这里就不细谈,感兴趣的可以自行深入研究。
总的来说我们知道了swap分区就是在物理内存不够用的情况下来作为一个补充的,缺点就是他的性能比较慢。依照个人稀烂的计算机基础只是swap的效果大致等同于windows系统当中的虚拟内存。不过现在大部分电脑的内存足够linux系统日常使用,所以有一些人在安装配置linux系统的时候选择不带swap