uswsusp (Русский) - ArchWiki

Jump to content
From ArchWiki

Состояние перевода: На этой странице представлен перевод статьи uswsusp. Дата последней синхронизации: 11 сентября 2023. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Ссылки по теме

- Ждущий и спящий режимы
- systemd (Русский)
- Управление питанием

µswsusp (userspace software suspend) — это набор userspace-инструментов, используемых для перехода в ждущий или спящий режим в системах Linux. В его состав входят:

s2ram — обёртка над механизмом suspend-to-RAM из ядра, позволяющая пользователю выполнять некоторые манипуляции с видеокартой со стороны пользователя перед уходом в сон и после пробуждения, что может помочь восстановить графику (и всю систему) после пробуждения. Включает в себя функциональность vbetool и radeontool, а также некоторые собственные приёмы. Содержит список рабочих конфигураций оборудования с соответствующими наборами операций, которые необходимо выполнить для их успешного пробуждения. Для этого используется белый список, который сопровождает HAL — s2ram транслирует параметры из базы данных HAL в параметры s2ram.

  Примечание: Поскольку HAL устарел, а KMS-драйверы могут сохранять состояние видеокарты напрямую без вмешательства со стороны userspace, разработка s2ram прекращена и новые записи в белый список не принимаются. Если используется KMS-драйвер, то s2ram будет напрямую уводить машину в сон.

s2disk — эталонная реализация userspace-программы для перехода в сон (µswsusp); она координирует действия, необходимые для приостановки системы (такие как замораживание процессов, подготовка подкачки и т.д.), и обрабатывает запись и чтение образа. s2disk уже поддерживает сжатие и шифрование образа, и могут быть легко добавлены другие возможности (например, красивый прогресс-бар, сохранение образа на удалённый диск, игра в тетрис в процессе восстановления и т.д.).

s2both — объединяет в себе функции s2ram и s2disk и очень полезна, когда батарея почти разряжена. s2both записывает снимок системы в подкачку (как s2disk), но затем переводит машину в ждущий режим (как s2ram). Если заряда батареи достаточно, то можно быстро пробудить машину из ждущего режима, а если нет, то можно загрузить сохранённое состояние с диска без потери работы.

## Установка

Установите пакет uswsusp-gitAUR.

## Настройка

Перед переходом в спящий режим (suspend-to-disk) нужно отредактировать `/etc/suspend.conf`.

- При использовании раздела подкачки:

      resume device = /dev/disk/by-label/swap

  где `by-label/swap` — путь к блочному устройству, которое является подкачкой.

- При использовании файла подкачки:

      resume device = /dev/sdXN  # раздел, на котором находится файл подкачки
      resume offset = 123456

  где `X` и `N` — это буква и номер раздела соответственно, а `123456` — смещение, по которому находится заголовок подкачки. Узнать смещение можно с помощью команды

      # swap-offset файл_подкачки

- Параметр `image size` (необязательный) может использоваться для ограничения размера образа снимка системы, создаваемого s2disk. Если не удаётся создать образ нужного размера, s2disk все равно уведёт систему в сон, создав образ большего размера. Если размер образа установлен в 0, то образ будет настолько маленьким, насколько возможно.

- Параметр `shutdown method` (необязательный) задаёт операцию, которая будет выполняться, когда машина будет готова к выключению. Если задано значение `reboot`, то машина будет немедленно перезагружена. При значении `platform` машина будет выключена с использованием специальных операций управления питанием, доступных ядру, которые могут потребоваться для правильной реинициализации оборудования после пробуждения и могут привести к более быстрому возобновлению работы системы. Если установить значение `shutdown`, то машина будет просто выключена, что может привести к проблемам с некоторым оборудованием.

- Если параметр `compute checksum` имеет значение `y`, то s2disk и инструменты возобновления будут использовать MD5 для проверки целостности образа.

- Если параметр `compress` имеет значение `y`, то s2disk и инструменты возобновления будут использовать LZF для сжатия/распаковки образа.

- Если `splash` имеет значение `y`, то s2disk и/или инструменты возобновления будут использовать графический экран загрузки. На данный момент поддерживаются splashy и fbsplash, но они недоступны в Arch Linux.
  Примечание: Для них требуются дополнительные `configure`-флаги в µswsusp (`--enable-splashy` и `--enable-fbsplash` соответственно).

- Опция `resume pause` вводит задержку после успешного выхода из спящего режима, чтобы дать пользователю возможность ознакомиться со статистикой (скорость чтения и записи, размер образа и т.д.).

- Если `threads` включен, то s2disk будет использовать несколько потоков для сжатия, шифрования и записи образа. Это должно ускорить работу. Подробнее об этом можно прочитать в комментариях к файлу suspend.c

### Настройка initramfs

Примечание: После внесения изменений в `/etc/suspend.conf` вы должны пересобрать образ initramfs. Если вы этого не сделаете и linux не сможет найти ваш образ при загрузке, то вы не увидите сообщения об ошибке. Процесс загрузки зависнет после запуска хука `uresume`, обычно после сообщения с версией libgcrypt.

Отредактируйте файл `/etc/mkinitcpio.conf` и добавьте `uresume` в массив `HOOKS`.

    HOOKS=(base udev autodetect block uresume filesystems)

Затем пересоберите образ initramfs.

### Пример настроек

    /etc/suspend.conf

    snapshot device = /dev/snapshot

    resume device = /dev/disk/by-label/swap

    # размер образа в байтах
    image size = 1468006400

    #suspend loglevel = 2

    compute checksum = y

    compress = y

    #encrypt = y

    #early writeout = y

    #splash = y

    # до 60 (секунд)
    #resume pause = 30

    threads = y

## Использование

### Напрямую

Для перехода в спящий режим (suspend-to-disk) выполните:

    # s2disk

Перед переходом в ждущий режим (suspend-to-ram) сперва выполните:

    # s2ram --test

чтобы проверить, есть ли ваша машина в базе данных известных машин. Если в результате будет получено что-то вроде `Machine matched entry xyz`, то можно запускать:

    # s2ram

А если нет, то нужно будет добавить `--force` и, возможно, какие-то ещё параметры (смотрите `s2ram --help`). Это может не сработать.

Теперь можно попробовать приостановить работу, запустив s2disk напрямую из командной строки:

    # s2disk

Возможно, придётся прибегнуть к userspace-инструменту, вызывающему s2disk.

### Через systemd

Для перехода в спящий режим с помощью команды `systemctl hibernate` отредактируйте юнит `systemd-hibernate.service`, добавив:

    /etc/systemd/system/systemd-hibernate.service.d/override.conf

    [Service]
    ExecStart=
    ExecStartPre=-/usr/bin/run-parts -v -a pre /usr/lib/systemd/system-sleep
    ExecStart=/usr/bin/s2disk
    ExecStartPost=-/usr/bin/run-parts -v --reverse -a post /usr/lib/systemd/system-sleep

После этого команда `systemctl hibernate` будет уводить систему в спящий режим. Внесите аналогичные изменения в `systemd-hybrid-sleep.service` (заменив s2disk на s2both), чтобы получить гибридный спящий режим на основе µswsusp.

## Решение проблем

### Моя машина отсутствует в белом списке

Если s2ram не найдёт в белом списке запись, соответствующую вашей машине, то будет выведено несколько идентификационных строк общего назначения для вашей машины (аналогичных тем, которые предоставляет `s2ram -i`). В этом случае можно попытаться заставить s2ram увести машину в сон с помощью команды `s2ram -f`.

### Опция force не работает

Если `s2ram -f` не срабатывает, попробуйте обходные пути, которые предлагает s2ram. Команда `s2ram -h` покажет список доступных опций:

    # s2ram -h

    Usage: s2ram [-nhi] [-fspmrav]

    Options:
        -h, --help:       this text.
        -n, --test:       test if the machine is in the database.
                          returns 0 if known and supported
        -i, --identify:   prints a string that identifies the machine.
        -f, --force:      force suspending, even on unknown machines.

    The following options are only available with -f/--force:
        -s, --vbe_save:   save VBE state before suspending and restore after resume.
        -p, --vbe_post:   VBE POST the graphics card after resume
        -m, --vbe_mode:   get VBE mode before suspend and set it after resume
        -r, --radeontool: turn off the backlight on radeons before suspending.
        -a, --acpi_sleep: set the acpi_sleep parameter before suspend
                          1=s3_bios, 2=s3_mode, 3=both
        -v, --pci_save:   save the PCI config space for the VGA card.

Попробуйте такие варианты:

    # s2ram -f -a 1
    # s2ram -f -a 2
    # s2ram -f -a 3
    # s2ram -f -p -m
    # s2ram -f -p -s
    # s2ram -f -m
    # s2ram -f -s
    # s2ram -f -p
    # s2ram -f -a 1 -m
    # s2ram -f -a 1 -s

Если никакие комбинации не сработали, попробуйте ещё раз с опцией `-v`.

Обратите внимание, что смешивание опций `-a` и опций vbetool (`-p`, `-m`, `-s`) обычно является крайней мерой и не имеет особого смысла.

Если вы нашли несколько комбинаций, которые работают (например, `s2ram -f -a 3` и `s2ram -f -p -m` работают на вашей машине), то лучше выбрать in-kernel метод (`-a`), а не userspace-методы (`-p`, `-m`, `-s`).

Проверьте все комбинации в обоих случаях при сообщении об успехе разработчикам s2ram:

- при запуске s2ram из консоли
- при запуске s2ram из X

### s2ram не работает ни с какими опциями

Есть приём, который не соответствует опции командной строки, поскольку требует от вас дополнительных операций. Он помечен в белом списке как NOFB и используется для тех ноутбуков, которые приостанавливают и возобновляют работу корректно только при отсутствии фреймбуфера. Если вы убедились, что ни одна из опций командной строки s2ram не работает, можно попробовать отключить фреймбуфер. Для этого необходимо отредактировать настройки вашего загрузчика, удалить все возможные значения `vga=значение` из строки ядра и перезагрузиться. Это необходимо сделать, по крайней мере, если вы используете фреймбуфер VESAFB (как в ядре Arch по умолчанию). Если вы используете другой драйвер фреймбуфера, обратитесь к его документации, чтобы узнать, как его отключить.

## Смотрите также

- Домашняя страница µswsusp
- Файл HOWTO в исходном коде ядра Linux
- `/usr/share/doc/suspend/README` документация µswsusp
- `/usr/share/doc/suspend/README.s2ram-whitelist` README белого списка s2ram

Category:

- Power management (Русский)