Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/nefelim4ag/systemd-swap

Script for creating hybrid swap space from zram swaps, swap files and swap partitions.
https://github.com/nefelim4ag/systemd-swap

btrfs shell swap systemd systemd-swap zram zswap

Last synced: 3 days ago
JSON representation

Script for creating hybrid swap space from zram swaps, swap files and swap partitions.

Awesome Lists containing this project

README

        

# systemd-swap
[![Code Style: Black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/ambv/black)

## ⚠️ Current code quality and commit frequency is low ⚠️

### Users should migrate to [systemd/zram-generator](https://github.com/systemd/zram-generator) since zram should be enough in most systems

Script to manage swap on:

- [zswap](https://www.kernel.org/doc/Documentation/vm/zswap.txt) - Enable/Configure
- [zram](https://www.kernel.org/doc/Documentation/blockdev/zram.txt) - Autoconfigurating for swap
- files - (sparse files for saving space, supports btrfs)
- block devices - auto find and do swapon

:information_source: It is configurable in `/etc/systemd/swap.conf`.

Additional terms:

- **SwapFC** (File Chunked) - provides a dynamic swap file allocation/deallocation

## File location

```text
/etc/systemd/swap.conf
/usr/lib/systemd/system/systemd-swap.service
/usr/bin/systemd-swap
```

## Please don't forget to enable and start with

```shell
sudo systemctl enable --now systemd-swap
```

## Install

- **Arch Linux**: in the [community](https://www.archlinux.org/packages/community/any/systemd-swap/) repo.

- **Debian based distros**

```shell
git clone https://github.com/Nefelim4ag/systemd-swap.git
cd systemd-swap
make deb
sudo apt install ./systemd-swap_*_all.deb
```

- **Fedora based distros**

```shell
sudo dnf copr enable zeno/systemd-swap
sudo dnf install systemd-swap
```

or

```shell
git clone https://github.com/Nefelim4ag/systemd-swap.git
cd systemd-swap
make rpm
sudo dnf install ./systemd-swap-*noarch.rpm

- **Manual**

Install dependencies:
- `python3` >= 3.7
- `python3` packages: `systemd-python` and `sysv_ipc`

```shell
git clone https://github.com/Nefelim4ag/systemd-swap.git
cd systemd-swap
sudo make install

# or into /usr/local:
sudo make prefix=/usr/local install
```

## About configuration

**Q**: Do we need to activate both zram and zswap?\
**A**: Nope, it's useless, as zram is a compressed RAM DISK, but zswap is a compressed _"writeback"_ CACHE on swap file/disk. Also having both activated can lead to inverse LRU as noted [here](https://askubuntu.com/questions/471912/zram-vs-zswap-vs-zcache-ultimate-guide-when-to-use-which-one/472227#472227)

**Q**: Do I need to use `swapfc_force_use_loop` on swapFC?\
**A**: Nope, as you wish really, native swapfile should work faster and it's safer in OOM condition in comparison to loop backed scenario.

**Q**: When would we want a certain configuration?\
**A**: In most cases zram is enough since it on average compresses 2-3x and is much faster than disk based swap.

**Q**: How many zram devices should one use?
**A**: If you are not using an ancient kernel (pre 4.7) there's no benefit from using multiple zram devices.

**Q**: Can we use this to enable hibernation?\
**A**: Nope as hibernation wants a persistent fs blocks and wants access to swap data directly from disk, this will not work on: _swapfc_ (without some magic of course, see [#85](https://github.com/Nefelim4ag/systemd-swap/issues/85)).

## Switch on systemd-swap:s automatic swap management

- Enable swapfc if wanted (note, you should **never** use zram and zswap at the same time)

```shell
vim /etc/systemd/swap.conf.d/overrides.conf
```

```ini
swapfc_enabled=1
```

- Stop any external swap:

```shell
sudo swapoff -a
```

- Remove swap entry from fstab:

```shell
vim /etc/fstab
```

- Remove your swap

```shell
# For Ubuntu
sudo rm -f /swapfile

# For Centos 7 (if using a swap partition and lvm)
lvremove -Ay /dev/centos/swap
lvextend -l +100%FREE centos/root
```

- Remove swap from Grub:

```shell
# For Ubuntu remove resume* in grub
vim /etc/default/grub

# For Centos 7 remove rd.lvm.lv=centos/swap*
vim /etc/default/grub

# For Manjaro remove resume* in grub & mkinitcpio
vim /etc/default/grub
vim /etc/mkinitcpio.conf
```

```shell
# For Ubuntu
update-grub

# For Centos 7
grub2-mkconfig -o /boot/grub2/grub.cfg

# For Manjaro
update-grub
mkinitcpio -P
```