如何分配更多的空间来交换并增加其大小,使其大于Ram?


8

情况:/dev/sda3HD 128 GB时,将交换大小()增加到大于Ram(8 GB)的
动机:8 GB RAM太小;我的SSD中有30 GB的可用空间;我想将20 GB转换为SSD交换
系统的特征

  • 交换不可变/可交换的。我找不到任何证据证明为什么/mnt/.swapfile应该不可变,因此您不需要更改swapfile的文件属性

    sudo lsattr /mnt/.swapfile 
    -------------e-- /mnt/.swapfile
    
  • 命令sudo fdisk -lu /dev/sda

    Disk /dev/sda: 113 GiB, 121332826112 bytes, 236978176 sectors 
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 4096 bytes
    I/O size (minimum/optimal): 4096 bytes / 4096 bytes
    Disklabel type: gpt
    Disk identifier: 082F85CA-EE3E-479C-8244-858B196FA5BA
    
    Device         Start       End   Sectors   Size Type
    /dev/sda1       2048      4095      2048     1M BIOS boot
    /dev/sda2       4096 220323839 220319744 105.1G Linux filesystem
    /dev/sda3  220323840 236976127  16652288     8G Linux swap
    
  • 命令df -h

    Filesystem      Size  Used Avail Use% Mounted on
    udev            3.9G     0  3.9G   0% /dev
    tmpfs           793M  9.4M  784M   2% /run
    /dev/sda2       104G   74G   25G  75% /
    tmpfs           3.9G   54M  3.9G   2% /dev/shm
    tmpfs           5.0M  4.0K  5.0M   1% /run/lock
    tmpfs           3.9G     0  3.9G   0% /sys/fs/cgroup
    tmpfs           793M   64K  793M   1% /run/user/1000
    
  • 分配更多磁盘空间用于交换/dev/sda3

当我在同一分区上进行高清和交换时,我的任务工作流程失败, /dev/sda3

masi@masi:~$ sudo -i

root@masi:~# swapoff /dev/sda3

root@masi:~# swapon
[blank]    

root@masi:~# dd if=/dev/zero of=/dev/sda3 bs=20480 count=1M
dd: error writing '/dev/sda3': No space left on device
416308+0 records in
416307+0 records out
8525971456 bytes (8.5 GB, 7.9 GiB) copied, 18.7633 s, 454 MB/s

root@masi:~# mkswap /dev/sda3
Setting up swapspace version 1, size = 8 GiB (8525967360 bytes)
no label, UUID=245cb42c-1d4e-4e21-b544-16b64af962d6

root@masi:~# swapon -p 99 /dev/sda3

root@masi:~# swapon
NAME       TYPE      SIZE USED PRIO
/dev/sda3  partition   8G   0B   99

root@masi:~# vi /etc/fstab 
...

在同一分区上进行高清和交换-当前工作流[Ijaz,cas,FarazX]

合并中。fallocate开头使用,dd因为无需放置零

masi@masi:~$ sudo fallocate -l 20G /mnt/.swapfile

masi@masi:~$ sudo mkswap /mnt/.swapfile 
Setting up swapspace version 1, size = 20 GiB (21474832384 bytes)
no label, UUID=45df9e48-1760-47e8-84d7-7a14f56bbd72

masi@masi:~$ sudo swapon /mnt/.swapfile
swapon: /mnt/.swapfile: insecure permissions 0644, 0600 suggested.

masi@masi:~$ sudo chmod 600 /mnt/.swapfile

masi@masi:~$ free -m
              total        used        free      shared  buff/cache   available
Mem:           7925        1494         175         196        6255        5892
Swap:         28610           0       28610

在您的行中添加以下行,/etc/fstab这比将行添加到您的运行级别(/etc/rc.local)中更好,在运行级别()中我将交换文件放到,/mnt/.swapfile以维护Linux / Unix理念并维护我的系统备份脚本的完整性;如果要交换到SSD,请使用该discard选项,以便在每次重新引导时对块进行修剪,因此不要sw

# http://unix.stackexchange.com/a/298212/16920
# http://unix.stackexchange.com/a/298543/16920

# If swap is on SSD, trim blocks each time at startup.
/mnt/.swapfile  none    swap    defaults,discard      0        0

# If swap on External HDD, just use sw.
#/media/masi/SamiWeek/.swapfile  none    swap    sw      0        0

资料来源

  1. 如何增加交换空间?https://askubuntu.com/a/178726/25388有关增加初学者交换空间的一般性讨论。
  2. 适用于HDD(而非SSD)的Linux Partition HOWTO:4.分区要求。http://www.tldp.org/HOWTO/Partition/requirements.html因此,请勿将交换内容放在SSD的外部磁道上,而应使用defaults,discard@cas建议的选项来修剪块。

系统:Linux Ubuntu 16.04 64位
Linux内核:4.6
Linux模块:wl
硬件:Macbook Air 2013-mid
Ram:8 GB
SSD:128 GB


输出fdisk -lu /dev/sda
斯特凡Chazelas

选项是在/ dev / sda2上缩小fs并重新分区(但是不能在实时系统中完成,因为您不能卸载/ dev / sda2,因为它是根文件系统:在某些livecd上启动是最简单的)或使用相对于块设备,或者使用压缩交换或压缩RAM交换文件
斯特凡Chazelas

1
这些放置注意事项很少适用于SSD :,因为它们没有像旋转磁盘那样的磁头或磁道。如果您的I / O负载很大,则可能需要对多个驱动器进行条带化。
ilkkachu

1
@Masi Hey mate,我正在使用FreeBSD系统,我想到了一些事情,我们chflags在BSD和OS X上有一个命令,在linux上有一个命令chattr,您可以使您的文件和目录越来越安全并且通过设置一些属性是不变的,这是tecmint.com上指南,希望对您有所帮助。
FarazX

Answers:


3

您只想使用中的空格增加系统上的交换大小sda2。您的sda2

/dev/sda2       104G   74G   25G  75%  / 

您可以使用在上创建的交换文件来增加额外的交换空间,该交换文件/将利用您的sda2。做就是了:

dd if=/dev/zero of=/swapfile bs=20480 count=1M

然后执行:

sudo mkswap /swapfile  
sudo swapon /swapfile 

并检查一下,您的交换空间将增加 free -m

是的,要在启动时启用它,请在 /etc/fstab

 /swapfile     none     swap     sw     0     0

3
是的,您应该能够计算。交换器应看到较大的虚拟内存。
Lmwangi

3
@masi如果在其中添加条目,/etc/fstab则可以避免中的条目rc.local。将交换文件放在类似的位置上/mnt/.swap,您无需担心太多
roaima

4
  1. 内存管理

    • 要按设备显示交换使用情况摘要:

      $ swapon -s
      
    • 要显示可用和已用的物理和交换内存的数量,请执行以下操作:

      $ free -h
      
    • 要将空间预分配给/ swapfile,可以使用以下行:

      $ fallocate -l 20G /swapfile
      % OR
      $ dd if=/dev/zero of=/swapfile bs=20480 count=1M
      
  2. 更改权限并创建/激活交换

    $ chmod 600 /swapfile
    
    $ mkswap /swapfile
    
    $ swapon /swapfile
    

    您还可以通过使用更改文件属性来提高文件安全性chattr。我建议您阅读其手册页,或在Tecmint网站上阅读本指南

  3. 通过查看命令cat /proc/swaps,使用free命令或的输出来验证它是否已启用

    $ swapon -s
    
  4. 要启用它在启动时,编辑/etc/fstab(有关文件系统的静态信息)以包括以下其中字段是fs_specfs_filefs_vfstypefs_mntopsfs_freqfs_passno,对此您可以通过阅读man 5 fstab

    $ vi /etc/fstab
    
    /swapfile     none     swap     defaults,discard     0     0
    
    • 在fourt参数fs_mntops中,不要仅sw在交换到SSD时使用,而是在defaults,discard每次启动时对内存块进行修整,请参阅此处有关在发生错误/警告时如何进行错误捕获和交换的答案discard选项肯定适用于分区。

2
@Masi不,fallocate只是一个简单的操作,无需置零并设置计数,dd因为如果您不知道自己在做什么,dd则可能做错了,这是一个超级强大的命令。当物理内存(RAM)容量已满并且要注意没有挂载点时,将使用Linux中的AFAIK交换空间。所以我认为它在哪里都无所谓,只需将其更改为
600。– FarazX

1
@Masi,我很高兴。顺便说一句,您可以fstab通过运行阅读有关字段的信息man 5 fstab。祝你好运。
FarazX

@Masi是的,当然。您可以通过列出文件属性lsattr,正如我提到的,可以通过设置属性chattr。例如,如果您想使其不可变,则可以使用chattr +i /mnt/.swapfile,或者在BSD或OS X中可以使用chflags uchg yourFile。您有许多属性选项,例如,s删除具有属性集的文件时,其块将被清零并写回到磁盘。但我建议您阅读其手册页并进行网上冲浪。它并不像看起来那样容易使用chattr,并且您应该意识到自己的实际操作!
FarazX

1
@Masi AFAIK设置属性取决于您的需要,因此对于大多数系统而言,答案是否定的。但是您会发现某些类似Unix的操作系统,其中某些文件或目录的默认设置为不可变或受限属性,
例如MacOSX。– FarazX

1
@Masi实际上,默认情况下不需要这样做,所以我认为答案是否定的,因为Swapfiles很有可能不是永久使用的。如果使用LVM分区,最好增加交换分区,而不要创建交换文件。但是,如果您不能做到这一点,并且swapfiles是唯一的选择,那么就没有问题,但是它将影响您的系统并降低其性能。没有规则手册,一切都取决于您的需求,您可以做什么,以及系统的安全性。
FarazX

2

您质疑“ 如何分配更多的空间来交换并增加其大小,而不是大于Ram? ”,它对改变系统的设置方式一无所知。

您的fdisk和免费输出告诉我们:

  • 您有一个专用于交换的分区(/ dev / sda3)。如果仅调整该分区的大小,则无需更改系统中的任何内容即可使用额外的空间。(/ etc / fstab)。
  • 您有一个上面装有操作系统的分区(/ dev / sda2)。该分区具有26G可用空间。如果将该分区缩小20G,则操作系统将剩下5G的空间可以使用。

交换分区不是扩展分区,这使增加大小变得容易一些。

所需工具:

  • 带gparted的可引导操作系统

在此处查找Parted Magic的最新免费版本的一个位置

使用gparted调整分区大小的指令

  1. 引导到具有gparted工具的另一个操作系统
  2. 在gparted; 调整操作系统分区(/ dev / sda2)的大小。缩减数量即可捐赠空间。这可能会花费很多时间,因为释放空间中的所有数据都需要通过gparted进行移动。
  3. 在gparted; 调整交换分区(/ dev / sda3)的大小。移动并扩展以包括所有可用空间。
  4. 重启进入sda2 OS。
  5. 确认正在使用交换分区(/ dev / sda3)。

请记住,您正在对磁盘和分区进行低级更改,任何错误或崩溃都可能损坏您的数据。

首先备份您的数据。


我认为您不需要gparted此处,因为您可以将拭子放在与操作系统相同的磁盘中。
莱奥波德·赫兹(LéoLéopoldHertz)2016年

是的,但是您将有两次交换。/ sda2上的文件,/ sda3上的分区。这回答了部分问题:“在/ dev / sda3中为Swap分配更多的磁盘空间。如何从/ dev / sda2中获取它?”。
jc__

参考以下语句:“但是,不确定,因为我认为/ dev / sda2和/ dev / sad3位于同一磁盘分区上”。/dev/sda2 /dev/sda3是单独的分区。
jc__

因此,您要添加另一台要用于交换的有空间的设备吗?如是。您可以在其上创建一个类型为swap的新分区,并在插入并准备使用时执行一个swapon或类似操作。移除设备时,请执行a swapoff或类似操作。重新启动操作系统时,将不会记住设备交换状态。
jc__

1
mkfs将使用文件系统格式化分区。(vfat,ext2,ext4,ntfs)。chattr将更改ext文件系统上文件的文件属性。
jc__
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.