Linux увеличить размер файла подкачки

How do I increase the size of swapfile without removing it in the terminal?

Is there a way to increase my existing «swapfile» without having to destroy and re-create it? I would like to up my swap space from 1GB to 2GB. Currently it is set up as such:

$ sudo swapon -s Filename Type Size Used Priority /swapfile file 1048572 736640 -1 $ ls -lh /swapfile -rw------- 1 root root 1.0G Nov 9 2016 /swapfile 

How much RAM do you have? Is 2G enough? I think that you’ll have to swapoff , create a new /swapfile, mkswap , and swapon -a

@Ravexina, A newbie question perhaps, but why would I want to add a new swap file rather than increasing the size of the existing one? Or is it not possible to increase an existing swap file?

@Dave That’s possible too, as you may know we can swapoff then dd and mkswap finally swapon . I thought you don’t want to touch your file.

@Ravexina, I don’t want to destroy the swapfile. If what your suggesting destroys the swapfile but is the only way, I’m in.

6 Answers 6

Now let’s increase the size of swap file:

sudo dd if=/dev/zero of=/swapfile bs=1M count=1024 oflag=append conv=notrunc 

The above command will append 1GiB of zero bytes at the end of your swap file.

Setup the file as a «swap file»:

On a production system, if your operating system does not let you to disable the swap file using sudo swapoff /swapfile and you receive a messages similar to:

swapoff failed: Cannot allocate memory 

Then You might consider having multiple swap files or create a new larger one, initialize it and then remove the old smaller one.

sudo fallocate -l 2G /swapfile is probably safer than dd (although it doesn’t keep the original swapfile), and it also needs a sudo chmod 600 /swapfile .

@heynnema Doesn’t fallocate make sparse files? The swapon manpage says sparse swap files are problematic (specifically mentioning fallocate ).

@muru guess I’m wrong 🙂 Every time that I read how to create a /swapfile with the onset of 17.04 they used fallocate. I guess that we’ll just have to use «disk destroyer»!

@heynnema: What you could do is to use fallocate to pre-allocate disk space and then use dd to fill the holes with zeros.

You should add a new swapfile instead of resizing the exist one because it costs you nothing to do so. To resize a swapfile, you must first disable it, which evicts the swap contents to RAM, which increases pressure on RAM and may even summon the OOM killer (not to mention that you could possibly be thrashing your disks for several minutes). Multiple swap files are not a problem, it’s trivially easy to setup yet another swap file. There’s quite literally no benefit to resizing a swap file over adding another.

dd if=/dev/zero of=/some/file count=1K bs=1M mkswap /some/file sudo chown root:root /some/file sudo chmod 600 /some/file sudo swapon /some/file 

This command creates a file of size 1 gigabyte. count is the size of the file in block size, which is set by the bs flag, in bytes. Here, bs is set to 1M (= 2^20 bytes, 1 megabyte (MiB)), when multiplied by 1K ( = 1024) is 1 GiB (1 gigabyte).

Читайте также:  Консоль администрирования сервера 1с linux

And does count=1K give a 1G file? count is in block size, yes? And that can be 512/4096? Or is my math wrong?

+1 This approach also makes it easy to disconnect one of the swapfiles if you later decide you need the disk space back.

«because it costs you nothing to do so» Except for hibernation. «The suspend image cannot span multiple swap partitions and/or swap files. It must fully fit in one swap partition or one swap file.[» wiki.archlinux.org/index.php/Power_management/…

Actual source: «Q: Does swsusp (to disk) use only one swap partition or can it use multiple swap partitions (aggregate them into one logical space)? A: Only one swap partition, sorry.» kernel.org/doc/Documentation/power/swsusp.txt

(this answer completely rewritten since the downvote)

Notes about fallocate vs dd

Before we continue, I want to point out that some answers use fallocate to allocate space for a file, instead of dd . Don’t do that. Use dd . @muru pointed out some important points here and here. Although fallocate is much much faster, it may create files with holes. I think that simply means the space is not contiguous, which is bad for swap files. I picture this as meaning that fallocate creates a C-style linked-list of memory, whereas dd creates a C-array contiguous block of memory. Swap files need a contiguous block. dd does this by doing a byte-for-byte copy of binary zeros from the /dev/zero pseudo-file into a new file it generates.

man swapon also states not to use fallocate , and to use dd instead. Here is the quote (emphasis added):

NOTES

You should not use swapon on a file with holes. This can be seen in the system log as

swapon: swapfile has holes. 

The swap file implementation in the kernel expects to be able to write to the file directly, without the assistance of the filesystem. This is a problem on preallocated files (e.g. fallocate(1) ) on filesystems like XFS or ext4 , and on copy-on-write filesystems like btrfs .

It is recommended to use dd(1) and /dev/zero to avoid holes on XFS and ext4.

And from man mkswap (emphasis added):

Note that a swap file must not contain any holes. Using cp(1) to create the file is not acceptable. Neither is use of fallocate(1) on file systems that support preallocated files, such as XFS or ext4, or on copy-on-write filesystems like btrfs. It is recommended to use dd(1) and /dev/zero in these cases. Please read notes from swapon(8) before adding a swap file to copy-on-write filesystems.

So, use dd , not fallocate , to create the swap files.

Option 1 (my preference): delete the old swap file and create a new one of the correct size:

Rather than resizing the swap file, just delete it and create a new one at the appropriate size!

swapon --show # see what swap files you have active sudo swapoff /swapfile # disable /swapfile # Create a new 16 GiB swap file in its place (could lock up your computer # for a few minutes if using a spinning Hard Disk Drive [HDD], so be patient) # (Ex: on 15 May 2023, this took 3 min 3 sec on a 5400 RPM 750 GB # model HGST HTS541075A9E680 SATA 2.6, 3.0Gb/s HDD in an old laptop of mine) sudo dd if=/dev/zero of=/swapfile count=16 bs=1G sudo mkswap /swapfile # turn this new file into swap space sudo chmod 0600 /swapfile # only let root read from/write to it, for security sudo swapon /swapfile # enable it swapon --show # ensure it is now active 

In case you are adding this swap file for the first time, ensure it is in your /etc/fstab file to make the swap file available again after each reboot. Just run these two commands:

# Make a backup copy of your /etc/fstab file just in case you # make any mistakes sudo cp /etc/fstab /etc/fstab.bak # Add this swapfile entry to the end of the file to re-enable # the swap file after each boot echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab 

Option 2: resize the old swap file:

The accepted answer by @Ravexina is correct. However, initially I didn’t understand all of its pieces, so I wanted to include some more descriptions and explain more of the details. See dd —help and man dd . Some of my learning on this comes from Bogdan Cornianu’s blog post as well. I also add a few commands at the end to show how to verify your swap space once you create it.

Читайте также:  Linux finding usb devices

How to resize swap file:

Here we will increase the size of the existing swap file by writing 8 GiB (Gibibytes) of zeros to the end of it.

    Turn off usage of just this one swap file (located at «/swapfile«):

 # Do this sudo swapoff /swapfile # NOT this, which unnecessarily disables all swap files or partitions # sudo swapoff --all # or # sudo swapoff -a 
 sudo dd if=/dev/zero of=/swapfile bs=1G count=8 oflag=append conv=notrunc 
  • if = input file
  • /dev/zero = a special Linux «file» which just outputs all zero bytes every time you read from it
  • of = output file
  • bs = block size
    • Here, 1G stands for 1 Gibibyte, or GiB, which is the base-2 version of «Gigabyte, which is base-10. According to man dd , G =1024*1024*1024 bytes. This is how I like to size files since computers and hardware memory are base-2.
    • If you’d like to use 1 Gigabyte, or GB, which is the base-10 version of «Gibibyte», which is base-2, then you must instead use 1GB rather than 1G . man dd shows that GB =1000*1000*1000 bytes.
    append append mode (makes sense only for output; conv=notrunc suggested) 
     sudo dd if=/dev/zero of=/swapfile bs=1G count=32 
    $ swapon --show NAME TYPE SIZE USED PRIO /swapfile file 64G 1.8G -2 
     # 1. Examine the /proc/meminfo file for entries named "swap", such # as the "SwapTotal" line cat /proc/meminfo | grep -B 1000 -A 1000 -i swap # 2. Look at total memory (RAM) and swap (virtual memory) used # and free: free -h 

    References:

    See also:

    1. My answer where I use the above information about increasing your swapfile size in order to solve an out-of-memory Bazel build error: Stack Overflow: java.lang.OutOfMemoryError when running bazel build

    Источник

    Как увеличить размер swap в Ubuntu

    Favorite

    Добавить в избранное

    Как увеличить размер swap в Ubuntu

    В этой краткой статье вы узнаете, как увеличить размер подкачки в Ubuntu и других дистрибутивах Linux.

    В последних выпусках Ubuntu вместо традиционного раздела подкачки используется файл подкачки. Файл подкачки — это просто файл под root, который используется как подкачка для распределения нагрузки на оперативную память.

    Самым большим преимуществом использования файла подкачки является то, что вы можете легко изменить его размер. Это не всегда тот случай, когда вы используете выделенный раздел подкачки.

    Давайте посмотрим, как изменить размер пространства подкачки в Ubuntu.

    Увеличьте размер swap в Ubuntu

    Если вы используете раздел подкачки и хотите увеличить его размер, вы можете создать файл подкачки. Ваша система Linux может использовать несколько мест подкачки по мере необходимости. Таким образом, вам не нужно трогать раздел.

    В этой статье предполагается, что в вашей системе используется файл подкачки, а не раздел подкачки.

    Теперь посмотрим, как увеличить файл подкачки. Прежде всего, убедитесь, что у вас есть файл подкачки в вашей системе.

    Он покажет текущий доступный своп. Если вы видите файл типа, это означает, что вы используете файл подкачки.

    swapon --show NAME TYPE SIZE USED PRIO /swapfile file 2G 0B -2

    Теперь, прежде чем изменить размер файла подкачки, вы должны отключить его. Вы также должны убедиться, что у вас достаточно свободной оперативной памяти, чтобы взять данные из файла подкачки. В противном случае создайте временный файл подкачки.

    Вы можете отключить данный файл подкачки с помощью этой команды. Команда не производит никакого вывода.

    Теперь используйте команду fallocate в Linux, чтобы изменить размер файла подкачки.

    sudo fallocate -l 4G /swapfile

    Убедитесь, что вы пометили этот файл как файл подкачки:

    Вы должны увидеть вывод, подобный этому, где он предупреждает, что старая подпись подкачки стирается.

    sudo mkswap /swapfile mkswap: /swapfile: warning: wiping old swap signature. Setting up swapspace version 1, size = 4 GiB (4294967296 bytes) no label, UUID=c50b27b0-a530-4dd0-9377-aa28eabf3957

    Как только вы это сделаете, включите файл подкачки:

    Вот и все. Вы только что увеличили размер подкачки в Ubuntu с 2 ГБ до 4 ГБ. Вы можете проверить размер свопа, используя команду free или команду swapon —show.

    free -h total used free shared buff/cache available Mem: 7.7G 873M 5.8G 265M 1.0G 6.3G Swap: 4.0G 0B 4.0G

    Вы видите, как легко изменить размер подкачки благодаря файлам подкачки. Вы не трогали раздел, вы не перезагружали систему. Все было сделано на лету. Как это круто!

    Мы надеемся, что вы нашли это краткое руководство полезным для изменения размера пространства подкачки в Ubuntu, а также в других дистрибутивах Linux. Если у вас есть вопросы или предложения, пожалуйста, оставьте комментарий ниже.

    Понравилась статья? Пожалуйста, поделитесь им и помогите нам расти 🙂

    Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

    Источник

Оцените статью
Adblock
detector