[扩展/新建swap]将文件或分区加载为swap

首先,让我们大致了解swap原理:

一种流行的、以讹传讹的说法是,安装Linux系统时,交换分区swap的大小应该是内存的两倍。也就是说,如果内存是2G,那么就应该分出4G的硬盘空间作为交换空间。其实这是严重的浪费。真实的情况是:可以根据你系统内存的大小,以及所使用的程序,自行决定交换分区的大小,甚至可以完全不用交换分区!

首先解释一下什么是交换分区。交换分区,英文的说法是swap,意思是“交换”、“实物交易”。它的功能就是在内存不够的情况下,操作系统先把内存中暂时不用的数据,存到硬盘的交换空间,腾出内存来让别的程序运行,和Windows的虚拟内存(pagefile.sys)的作用是一样的。

做一个假设:如果你的内存足够大,极少出现内存不足的情况,那么你就不需要交换分区。事实上,这种可能性是完全存在的。现在的1G内存的电脑不算什么了。动辄4G内存的电脑也日益普遍。日常使用的话,很少能用完全部的内存。在用不完内存容量的情况下,还要划出它两倍的硬盘空间用于内存交换,这不是浪费吗?

可以说,在你内存基本够用的情况下,完全可以不要交换空间。在Windows下也是一样,在系统属性中,把虚拟内存设置为0,系统依然运行的很好。当然,如果你用的是服务器,还是要有专门的虚拟内存,有备无患。但是虚拟内存的大小不一定非要内存的两倍。

那么怎么知道你的系统有没有用到交换空间呢?只需要在root用户下,运行下面的命令就可以知道了。
free -m
在日常应用中,通过上述命令看到交换空间的使用情况为0,那么你就不需要很大的虚拟内存,甚至可以完全不需要另辟硬盘空间作为虚拟内存。那么,万一有一天你需要了呢,难道要重装系统?大可不必,在Linux下虚拟内存不单可以放在单独的交换分区,也可以是一个在正常分区下的交换文件。



我们有时免不了要扩展或是改变swap的大小或是挂载位置,为了应会这些情况,知道下面这些就足够了!


1  查看swap 空间大小(总计): 

     # free -m          默认单位为k, -m 单位为M
                 total       used       free     shared    buffers     cached
  Mem:           377        180        197          0         19        110
  -/+ buffers/cache:         50        327
  Swap:          572          0        572

 

2  查看swap 空间(file(s)/partition(s)):

      包括 文件 和 分区 的详细信息

  # swapon -s
  等价于
  # cat /proc/swaps

 


3 添加交换空间
  两种选择:添加一个交换分区或添加一个交换文件。推荐你添加一个交换分区;不过,若你没有多少空闲空间可用,则添加交换文件。

    3.1 添加一个交换分区
  步骤如下:
      a  使用fdisk来创建交换分区(假设 /dev/sdb2 是创建的交换分区)
      b 使用 mkswap 命令来设置交换分区:
   # mkswap /dev/sdb2
      c 启用交换分区:
   # swapon /dev/sdb2
      d 写入/etc/fstab,以便在引导时启用:
      /dev/sdb2 swap swap defaults 0 0

    3.2 添加一个交换文件
  a  创建大小为512M的交换文件:
   # dd if=/dev/zero of=/swapfile1 bs=1024k count=512
  b 使用 mkswap 命令来设置交换文件:
   # mkswap /swapfile1
  c 启用交换分区:
   # swapon /swapfile1
  d 写入/etc/fstab,以便在引导时启用:
    /swapfile1 swap swap defaults 0 0

  新添了交换分区并启用它之后,请查看 cat /proc/swaps 或 free 命令的输出来确保交换分区已被启用了。

4 删除交换空间:
  a 禁用交换分区:
   # swapoff /dev/sdb2
  b 从 /etc/fstab 中删除项目;
  c 使用fdisk或yast工具删除分区。

  删除交换文件步骤同上。

 


 

 

  # free -m
                 total       used       free     shared    buffers     cached
  Mem:           377        180        197          0         19        110
  -/+ buffers/cache:         50        327
  Swap:          572          0        572

 

Mem 行显示了从系统角度看来内存使用的情况, total是系统可用的内存大小, 数量上等于系统物理内存减去内核保留的内存. 
buffers和cached是系统用做缓冲的内存. buffers与某个块设备关联, 包含了文件系统元数据, 并且跟踪了块的变化. cache只包含了文件本身.

-/+ buffers/cache  行则从用户角度显示内存信息, 可用内存从数量上等于mem行used列值减去buffers和cached内存的大小.

 因为buffers和cached是操作系统为加快系统运行而设置的, 当用户需要时, 可以只接为用户使用.

 

top 显示系统运行时的各进程动态、实时的状态(cpu、内存)

top 中有3个列 VIRT RES SHR, 标示了进程使用的内存情况.
VIRT 标识这个进程可以使用的内存总大小, 包括这个进程真实使用的内存, 映射过的文件, 和别的进程共享的内存等. 
RES 标识这个这个进程真实占用内存的大小. 
SHR 标识可以和别的进程共享的内存和库大小.

vmstat 显示内存的使用情况

这些命令都是从/proc/meminfo中读取内存信息.

关于/proc/meminfo中各行的含意, 在内核源代码的Documentation/filesystems/proc.txt文件中有叙述

系统的真实内存大小可以用 dmesg | grep [mM][eE][mM]看到

/proc/pid/status显示一个进程的详细状态
# cat /proc/5346/status
Name: bash
State: S (sleeping)
SleepAVG: 98%
Tgid: 5346
Pid: 5346
PPid: 5343
TracerPid: 0
Uid: 1000 1000 1000 1000
Gid: 104 104 104 104
FDSize: 256
Groups: 6 24 29 44 104 113 1000 1001
VmPeak: 6528 kB
VmSize: 6528 kB
VmLck: 0 kB
VmHWM: 1976 kB
VmRSS: 1976 kB
VmData: 752 kB
VmStk: 84 kB
VmExe: 644 kB
VmLib: 1788 kB
VmPTE: 16 kB
Threads: 1
SigQ: 0/4294967295
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000000384004
SigCgt: 000000004b813efb
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000

VmSize即为该进程内存总大小, 和top输出中的VIRT一致.

<think>好的,用户现在问的是在使用sudo cfdisk /dev/sda调整分区之后具体该怎么操作。之前他们的问题是关于无法删除sda2分区,现在可能已经解决了删除的问题,现在想进一步调整分区,比如调整大小者创建新分区。我需要先回顾之前的对话,看看用户可能处于什么情境下。 首先,用户之前遇到sda2无法删除的问题,可能是因为扩展分区包含逻辑分区如sda5(swap),所以需要先删除逻辑分区再删除扩展分区。现在他们可能已经成功删除了sda2,现在想要重新调整分区结构,比如创建新分区者调整现有分区的大小。 用户现在使用的工具是cfdisk,这是一个命令行下的分区工具,界面相对友好。他们可能对分区操作有一定的了解,但需要具体的步骤指导。需要详细说明使用cfdisk后的操作步骤,包括如何选择分区、调整大小、设置类型、保存更改等。 用户的需求可能是调整分区后如何正确应用这些更改,并确保文件系统分区的正确使用。例如,调整分区大小后可能需要调整文件系统,者创建新分区后需要格式化和挂载。 需要考虑到用户可能遇到的常见问题,比如调整分区后未生效,者没有格式化导致无法使用。另外,要提醒用户操作分区有风险,备份数据的重要性,尤其是在调整分区大小时可能导致数据丢失。 另外,用户可能是在虚拟机环境中操作,之前的问题提到了VirtualBox,所以可能需要特别说明在虚拟机中的注意事项,比如确保磁盘未被锁定,者是否需要关闭虚拟机进行调整。 在回答中,应该分步骤说明:首先调整分区的具体操作,比如选择分区、调整大小、写入更改;然后处理文件系统的调整(如使用resize2fs);如果是新建分区,需要格式化和挂载。同时要提醒更新fstab和重新生成grub配置(如果涉及系统分区)。 还需要检查是否有遗漏的步骤,例如partprobe重新加载分区表,者重启系统使更改生效。此外,对于swap分区,可能需要使用mkswapswapon命令。 用户可能对命令行操作不太熟悉,所以需要给出具体的命令示例,并解释每个步骤的作用,以及可能出现的错误和处理方法。例如,调整分区文件系统可能需要检查,使用fsck命令。 最后,要强调数据备份的重要性,避免操作失误导致数据丢失,特别是在调整分区时,如果步骤错误可能导致分区表损坏,所以确保用户了解风险。</think>使用 `cfdisk` 调整分区后,需根据具体操作(如创建、删除、调整大小等)进行后续处理。以下是详细操作步骤和注意事项: --- ### **一、调整分区后的通用操作** 1. **进入 `cfdisk` 界面** 执行命令后,进入交互式界面: ```bash sudo cfdisk /dev/sda ``` - 使用 **方向键** 选择目标分区(如 `sda2`)。 - 按 **回车键** 调出操作菜单。 2. **执行具体操作** - **调整分区大小**:选择 `Resize`,输入新大小(如 `+10G` 直接指定大小)。 - **删除分区**:选择 `Delete`。 - **新建分区**:选择 `Free space` → `New` → 指定大小和类型(主分区/逻辑分区)。 - **修改分区类型**:选择 `Type` → 输入类型代码(如 `83` 为 Linux 文件系统,`82` 为 Swap)。 3. **保存更改** 完成操作后: - 选择 `Write` → 输入 `yes` 确认。 - 选择 `Quit` 退出 `cfdisk`。 4. **刷新分区表** 退出后,强制内核重新读取分区表: ```bash sudo partprobe /dev/sda ``` 重启系统(部分系统需重启生效)。 --- ### **二、分区调整后的后续处理** 根据不同的操作类型,需执行以下步骤: #### **1. 调整分区大小(如扩展/缩小)** - **扩展文件系统**(适用于 ext4 等): ```bash # 扩展分区后,调整文件系统大小(假设分区为 /dev/sda2) sudo resize2fs /dev/sda2 ``` - **缩小文件系统**(需先缩小文件系统,再调整分区): ```bash # 1. 卸载分区 sudo umount /dev/sda2 # 2. 检查文件系统 sudo e2fsck -f /dev/sda2 # 3. 缩小文件系统(例如缩小到 20G) sudo resize2fs /dev/sda2 20G # 4. 进入 cfdisk 调整分区大小 ``` #### **2. 新建分区** - **格式化新分区**(如 ext4 格式): ```bash sudo mkfs.ext4 /dev/sdaX # 将 X 替换为新分区的编号(如 sda3) ``` - **挂载分区**: ```bash sudo mkdir /mnt/new_partition sudo mount /dev/sdaX /mnt/new_partition ``` - **永久挂载**: 编辑 `/etc/fstab`,添加一行(替换 UUID 设备路径): ```bash UUID=xxxx-xxxx-xxxx /mnt/new_partition ext4 defaults 0 2 ``` 获取 UUID: ```bash sudo blkid /dev/sdaX ``` #### **3. 删除分区** - **更新系统配置**: 如果删除的是 Swap 分区已挂载的分区,需修改 `/etc/fstab`,删除对应条目。 #### **4. 修改分区类型** - **更新系统识别**: 若修改了 Swap 分区类型,需重新初始化: ```bash sudo mkswap /dev/sdaX sudo swapon /dev/sdaX ``` --- ### **三、注意事项** 1. **数据备份** 操作分区前,**备份重要数据**,尤其是调整分区大小删除分区时。 2. **分区顺序依赖** - 扩展分区(如 `sda2`)需先删除内部逻辑分区(如 `sda5`)。 - 主分区数量有限(最多 4 个),需合理分配。 3. **文件系统兼容性** - `resize2fs` 仅适用于 ext2/3/4 文件系统。 - 其他文件系统(如 NTFS、Btrfs)需使用专用工具(如 `ntfsresize`、`btrfs filesystem resize`)。 4. **虚拟机/物理机差异** - 虚拟机中操作时,确保磁盘未被快照锁定。 - 物理机建议在 Live USB 环境下操作关键分区(如系统分区)。 --- ### **四、操作后验证** 1. 检查分区状态: ```bash sudo fdisk -l /dev/sda ``` 2. 查看文件系统是否正常: ```bash df -Th # 查看已挂载分区 lsblk # 查看分区树 ``` 3. 测试挂载配置: ```bash sudo mount -a # 检查 /etc/fstab 是否有错误 ``` --- 如果操作中遇到错误(如分区表未更新、文件系统损坏),可尝试: - 使用 `fsck` 修复文件系统: ```bash sudo fsck /dev/sdaX ``` - 重新启动系统卸载重挂分区
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值