Какие службы dev-loop были запущены при загрузке?

Вопрос или проблема

После загрузки я запустил systemd-analyze blame, и вот результаты:

     21.596s systemd-journal-flush.service
     18.658s dev-sda8.device
     15.099s dev-loop33.device
     15.034s dev-loop19.device
     15.012s dev-loop34.device
     14.989s dev-loop21.device
     14.877s dev-loop15.device
     14.866s dev-loop26.device
     14.773s dev-loop27.device
     14.684s dev-loop30.device
     14.677s dev-loop32.device
     14.649s dev-loop35.device
     14.590s dev-loop25.device
     14.267s dev-loop23.device
     14.192s dev-loop24.device
     14.156s dev-loop29.device
     14.133s dev-loop16.device
     14.065s dev-loop31.device
     14.059s dev-loop28.device
     13.821s dev-loop20.device
     13.531s dev-loop22.device
     13.495s dev-loop14.device
     13.364s dev-loop18.device

Что это за сервисы dev-loopxx.device (xx обозначает цифры) и почему они занимают так много времени? Они связаны с монтированием снапов? Могу ли я уменьшить время загрузки, отключив их? Я запускаю Ubuntu 18.04 вместе с Windows 10.

Вы можете определить список всех установленных снапов с помощью snap list, для определения связи между точкой монтирования и именем снапа вы можете использовать systemctl status, mount и losetup.

Например, в моей Ubuntu MATE 18.04 LTS установлены следующие снапы:

$ snap list
Name                 Version           Rev   Tracking  Developer      Notes
core                 16-2.33.1         4917  stable    canonical      core
software-boutique    18.04.0-5b99b84   31    stable/…  flexiondotorg  classic
ubuntu-mate-welcome  17.10.23-e4f4c4c  169   stable/…  flexiondotorg  classic

Они создают loop-устройства следующим образом:

$ systemd-analyze blame | grep dev-loop
          4.303s dev-loop4.device
          4.267s dev-loop2.device
          4.193s dev-loop0.device
          4.146s dev-loop3.device
           111ms dev-loop5.device

Точки монтирования следующие:

$ mount | grep snapd
/var/lib/snapd/snaps/core_4830.snap on /snap/core/4830 type squashfs (ro,nodev,relatime,x-gdu.hide)
/var/lib/snapd/snaps/ubuntu-mate-welcome_169.snap on /snap/ubuntu-mate-welcome/169 type squashfs (ro,nodev,relatime,x-gdu.hide)
/var/lib/snapd/snaps/software-boutique_31.snap on /snap/software-boutique/31 type squashfs (ro,nodev,relatime,x-gdu.hide)
/var/lib/snapd/snaps/core_4650.snap on /snap/core/4650 type squashfs (ro,nodev,relatime,x-gdu.hide)
/var/lib/snapd/snaps/core_4917.snap on /snap/core/4917 type squashfs (ro,nodev,relatime,x-gdu.hide)

Давайте посмотрим подробнее на dev-loop4.device:

$ systemctl status dev-loop4.device
● dev-loop4.device - /dev/loop4
   Follow: unit currently follows state of sys-devices-virtual-block-loop4.device
   Loaded: loaded
   Active: active (plugged) since Tue 2018-07-17 13:05:41 MSK; 4min 44s ago
   Device: /sys/devices/virtual/block/loop4

Папка /sys/devices/virtual/block/loop4 содержит очень полезный файл loop/backing_file, мы можем прочитать его содержимое:

$ cat /sys/devices/virtual/block/loop4/loop/backing_file 
/var/lib/snapd/snaps/core_4650.snap

Таким образом, мы определили, что /dev/loop4 создается снапом core.


Но самый простой способ — использовать losetup (см. man losetup):

$ losetup 
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE                                         DIO LOG-SEC
/dev/loop4         0      0         1  1 /var/lib/snapd/snaps/core_4650.snap                 0     512
/dev/loop2         0      0         1  1 /var/lib/snapd/snaps/ubuntu-mate-welcome_169.snap   0     512
/dev/loop0         0      0         1  1 /var/lib/snapd/snaps/core_4830.snap                 0     512
/dev/loop5         0      0         1  1 /var/lib/snapd/snaps/core_4917.snap                 0     512
/dev/loop3         0      0         1  1 /var/lib/snapd/snaps/software-boutique_31.snap      0     512

Надеюсь, это поможет лучше понять точки монтирования снапов.

Вывод: используя снапы для получения актуального программного обеспечения, мы в конечном итоге платим за это более высоким сетевым трафиком, большим использованием диска и более медленным временем загрузки. Если вы не хотите использовать снапы совсем, то удалите их с помощью sudo apt-get purge snapd.

Все еще актуально. Возможно, даже больше в наше время, когда общие приложения, такие как Thunderbird, распространяются только в виде снапов, которые сохраняют активную версию истории, что создает, по сути, неиспользуемые dev-loop устройства при запуске. Я регулярно использую скрипт (не из моего пера, но я не помню, где я его нашел – извините, автору!) для удаления старых снапов, тем самым также удаляя ненужные dev-loop устройства.

#!/bin/bash
# Удаляет старые ревизии снапов
# ЗАКРОЙТЕ ВСЕ СНАПЫ ПЕРЕД ЗАПУСКОМ ЭТОГО СКРИПТА
set -eu
snap list --all | awk '/disabled/{print $1, $3}' |
    while read snapname revision; do
        snap remove "$snapname" --revision="$revision"
    done

Это помогает мне значительно ускорить запуск моего Ubuntu 24.04.

Ответ или решение

Вопрос задается про работу служб, которые запускаются вместе с загрузкой операционной системы Ubuntu 18.04 и связанных с устройствами вида dev-loopxx.device. Рассмотрим, что это за службы, почему они занимают столько времени при загрузке системы и как это может быть связано с использованием snaps.

Теория

Сначала следует понять, что такое loop-устройства в контексте системы Linux. Луп-устройства — это виртуальные блочные устройства, которые позволяют монтировать файл-образ как если бы он был физическим устройством. В последние годы использование луп-устройств значительно возросло благодаря внедрению snap, системы упаковки и развертывания приложений, разрабатываемой компанией Canonical.

Snaps представляют собой приложения, упакованные в формате, который содержит все необходимые зависимости. Эти пакеты монтируются в файловую систему как SquashFS-образы, используемые через вышеупомянутые loop-устройства. Каждый snap в такой конфигурации монтируется на свое собственное loop-устройство, что позволяет изолировать его от остальной системы.

Пример

По данным, представленным в вопросе, команды systemd-analyze blame и другие, такие как snap list, losetup, mount и systemctl, предлагают следующий рабочий процесс:

  1. Systemd-analyze: показывает время, необходимое для инициализации различных сервисов и устройств при загрузке системы. Как видно из примера, между запуском устройства dev-sda8.device и несколькими dev-loopxx.device существует задержка.

  2. Snap list: позволяет увидеть все установленные snap-пакеты и узнать, какие из них могут быть причиной использования loop-устройств.

  3. Mount и losetup: показывают монтирование и связь между loop-устройствами и snap-пакетами. Например, losetup может продемонстрировать, что loop4 связано с образом snap core_4650.snap.

Базируясь на этом примере, видим, что указанные loop-устройства непосредственно связаны с установленными snap-пакетами. Задержки в их инициализации из-за монтирования множества snap-образов могут серьёзно увеличить время загрузки системы.

Применение

Как можно улучшить время загрузки системы? Вот несколько предложений:

  1. Отключение или удаление Snap: Если вы не используете snap-приложения или можете обойтись без них, рассмотрите возможность полного удаления snap-системы через sudo apt-get purge snapd.

  2. Очистка старых ревизий Snap: Ввиду особенностей snap, они могут хранить несколько ревизий приложений, что приводит к созданию избыточных loop-устройств. Используйте скрипт, прошедший через ваш вопрос:

    #!/bin/bash
    # Удаляет старые ревизии snap
    # ЗАКРОЙТЕ ВСЕ SNAP ПЕРЕД ЗАПУСКОМ
    set -eu
    snap list --all | awk '/disabled/{print $1, $3}' |
       while read snapname revision; do
           snap remove "$snapname" --revision="$revision"
       done

    Этот скрипт проверяет систему на наличие старых ревизий и удаляет их, что позволяет освободить loop-устройства и улучшает время загрузки.

  3. Оптимизация конфигураций системы: Также есть более общие советы по ускорению времени загрузки, такие как оптимизация BIOS/UEFI настроек и использование профилировщиков для более детальной диагностики проблем.

Заключение

Проблема долгого времени загрузки системы из-за инициализации множества loop-устройств связана с использованием snap-пакетов и может быть частично решена за счет оптимизации работы этих пакетов. Если не требуется функциональности, предоставляемой snap, было бы разумно удалить их. В противном случае, регулярное управление ревизиями snap-пакетов также может быть полезным. Каждый метод, приведенный выше, может улучшить производительность системы и уменьшить время загрузки.

Конечно, необходимо учитывать, что snap стал стандартом для некоторых распространенных приложений Ubuntu, таких как Thunderbird, и они могут не быть доступны в других форматах. Пользовательский выбор и приоритеты, как всегда, играют ключевую роль в решении подобных задач.

Оцените материал
Добавить комментарий

Капча загружается...