[Linux]swap分区被误删除导致系统启动失败的解决方案

Posted 鱼竿钓鱼干

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Linux]swap分区被误删除导致系统启动失败的解决方案相关的知识,希望对你有一定的参考价值。

[Linux]swap分区被误删除导致系统启动失败的解决方案

问题阐述

经过某种奇妙的操作后把系统的swap分区整没了,然后造成经常性的启动失败

Dependency failed for /dev/disk/by-uuid/8bc79a31-f488-46a9-bf5b-3973ab39bd8
Dependency failed for Swaps

解决方案

网上博客应该蛮多的,本文主要用于个人知识补充。个人觉得学linux遇到问题不应该只是复制粘贴博客上的命令来解决问题,更应该了解那些指令背后逻辑以及出现问题的原因。

  1. 使用free -m 检查 内存和交换空间
free -m

正常的情况如下图所示
如果swap被删除那么会变成0
如果要了解检查swap空间的其他命令可以看这篇资料

  1. 使用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不依赖系统中断,数据产生速度快,但随机性较低。
  1. 使用mkswap设置swap分区
mkswap /swapfile
  1. 使用swapon启用swap分区
swapon /swapfile
  1. 保存设置使其永久生效
    进入/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

以上是关于[Linux]swap分区被误删除导致系统启动失败的解决方案的主要内容,如果未能解决你的问题,请参考以下文章

在Red Hat Enterprise Linux 6中恢复被误删除的文件

boot分区 和fstab文件被损坏后的解决方案

CentOS7下swap分区创建(添加),删除以及相关配置

linux恢复误删除文件-extundelete

详谈Linux文件系统基础和相关操作以及swap分区

恢复linux里被误删除的文件