Почему все снэпы монтируются и отображаются как блочные устройства или разделы в Ubuntu 18.04?

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

На Ubuntu 18.04 команда lsblk показывает 16 петлевых устройств (по 2-3 раза для каждого snap). Вопрос в том, почему они показываются в результатах для lsblk, fdisk -l и blkid?

Это создает много лишней информации от реальных разделов дисков, которые мне нужно видеть, а именно разделов /dev/. Я знаю, что существует предполагаемая дублирующая версия этого вопроса, но в ней только спрашивают, почему три петли показываются для каждого snap. Я хочу знать, почему эти snaps вообще отображаются, и предполагаемый дубликат не отвечает на это (возможно, те, кто отметили это как дубликат, могли бы помочь мне, объяснив, почему это дубликат). Технически, они квалифицируются как файловые системы (которые я ни создавал, ни запрашивал), но они мешают выводу информации для разделов /dev/, которые меня интересуют. Это становится проблемой, когда fdisk -l выводит трехстраничный список, заполненный в основном snaps.

Вывод недавней установки Ubuntu (1 неделя назад), и я не установил никаких snaps:

$ lsblk  
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT  
loop0    7:0    0  14.5M  1 loop /snap/gnome-logs/37  
loop1    7:1    0   2.3M  1 loop /snap/gnome-calculator/170  
loop2    7:2    0  86.6M  1 loop /snap/core/4486  
loop3    7:3    0  86.6M  1 loop /snap/core/4650  
loop4    7:4    0   1.6M  1 loop /snap/gnome-calculator/154  
loop5    7:5    0  14.5M  1 loop /snap/gnome-logs/34  
loop6    7:6    0   3.3M  1 loop /snap/gnome-system-monitor/36  
loop7    7:7    0   2.3M  1 loop /snap/gnome-calculator/178  
loop8    7:8    0    13M  1 loop /snap/gnome-characters/101  
loop9    7:9    0   3.7M  1 loop /snap/gnome-system-monitor/45  
loop10   7:10   0 139.5M  1 loop /snap/gnome-3-26-1604/64  
loop11   7:11   0   140M  1 loop /snap/gnome-3-26-1604/59   
loop12   7:12   0   3.7M  1 loop /snap/gnome-system-monitor/41  
loop13   7:13   0    21M  1 loop /snap/gnome-logs/25  
loop14   7:14   0  12.2M  1 loop /snap/gnome-characters/69  
loop15   7:15   0    13M  1 loop /snap/gnome-characters/96  
sda      8:0    0 298.1G  0 disk  
├─sda1   8:1    0   512M  0 part /boot/efi  
└─sda2   8:2    0 297.6G  0 part /  
sr0     11:0    1  1024M  0 rom  

(дополнительный скриншот вышеуказанного текста):
screenshot.jpg

Мой snap list показывает 6 результатов:

core
gnome-3-26-1604
gnome-calculator
gnome-characters
gnome-logs
gnome-system-monitor

Тем временем gnome-disk-utility вообще ничего не показывает для snaps, показывая только мой жесткий диск и оптический привод.

Не будет очень эффективно, если каждое установленное snap будет отображаться как блочное устройство (по 2-3 раза для добавления). Должен ли я ожидать, что будущие обновления решат эту проблему?

Правка:
fdisk -l также выводит очень длинный список с 16 экземплярами этих “дисковых петель” (Диск /dev/loop0, Диск /dev/loop1 и т.д., каждый с деталями, которые я не буду показывать здесь, потому что это слишком долго). Это не может быть преднамеренным поведением, правда?
blkid также перечисляет 16 петель с TYPE=”squashfs”. По крайней мере, parted -l работает как ожидалось, выводя только мои реальные разделы дисков.

Я только что протестировал это, и установка дополнительных snaps действительно добавляет их в вывод lsblk. Поэтому fdisk, lsblk, blkid могут иметь потенциально огромные списки вывода в зависимости от количества доступных и установленных snaps.

Когда вы вводите команду

snap list 

вы получите вывод фактически установленных snap-пакетов. Причина в том, что когда snap-пакет обновляется, старая версия сохраняется (смотрите документацию snapcraft).

Цитата из документации snapcraft

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

Явное удаление snap из вашей системы также удалит код и очистит данные для всех предыдущих версий.

Например, у вас установлено более одной версии gnome-calculator.

Если вам нужна только новейшая версия, вы можете использовать

sudo snap remove gnome-calculator --revision <номер версии>

Используя команду

losetup -a 

вы можете увидеть примонтированные snaps (петлевые устройства)

Если вы хотите удалить дубликаты, введите

sudo losetup -d /dev/loop<номер петли>

Это, похоже, ошибка в коде snap, поскольку все более старые версии хранятся в файле /var/lib/snapd/snaps.

Вы можете использовать флаг -e7 для lsblk, чтобы исключить петлевые устройства, что коротко и легко запоминается (хоть и может не легко запомниться)

lsblk -e7

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

Я согласен с вашим упоминанием различия между fdisk -l и parted -l. Хотя fdisk показывает очень хороший подробный вывод блочных устройств, он отображает слишком много других вещей, которые отвлекают от того, что вы пытаетесь увидеть.

Решение

Вы можете отфильтровать форматированный вывод lsblk. Это хорошо работает, чтобы дать чистый вывод, такой как тот, который вы получаете с gnome-disk-utility.

$ lsblk -o name,mountpoint,label,size,fstype,uuid | egrep -v "^loop"

Или, как вы указали в вашем вопросе:

$ sudo parted -l

Для команды df в вашем вопросе используйте:

$ df | egrep -v /dev/loop

Если вы используете snap-версию системного монитора, то вы увидите все файловые системы, используемые snap, а также те, которые вы используете.

Легкий “фикс” — удалить Gnome System Monitor из магазина приложений. Это snap-версия.

Затем установите Gnome System Monitor из обычных репозиториев с помощью менеджера пакетов Synaptic. Это обычная версия, которая устанавливает множество файлов по всему вашему корневому разделу. Прекрасно!

И вы увидите именно то, что ожидаете увидеть, когда запустите Gnome System Monitor…

Я понимаю, что это старый вопрос, но поскольку он был близко к верху результатов поиска, когда я гуглил, почему blkid / fdisk -l генерируют много “петлевых” записей, я решил поделиться для следующего человека.

Один из вариантов, который может сработать (в зависимости от ваших требований), это просто удалить snapd. На Linux Mint 19.3 (базе Ubuntu 18.04) snapd не установлен по умолчанию и, следовательно, не требуется. Насколько я понимаю, Ubuntu 18.04 отличается тем, что snapd включен из коробки. В Mint 19.3 установка snapd генерирует такие же “петлевые” записи в fdisk -l и blkid, и выполнение sudo apt purge snapd избавляет от них.

Я НЕ тестировал это конкретно на Ubuntu 18.04, но предполагая, что ничего критического не пострадает от удаления snapd, то это может быть жизнеспособным вариантом, если вы на самом деле не используете snap как пользователь.

Я не думаю, что удаление snapd сломает что-либо критическое в Ubuntu на основе 1, 2, но я видел заметку здесь, что вам, возможно, нужно будет переустановить некоторые стандартные пакеты Ubuntu, которые были установлены как snaps (sudo apt install gnome-software gnome-calculator gnome-logs gnome-characters gnome-system-monitor). Я не уверен, является ли это полным списком / какие стандартные пакеты понадобятся в MATE/KDE/xfce/etc. Чтобы проверить это, я настоятельно рекомендую протестировать в виртуальной машине, если вам не все равно о переустановке в случае, если что-то пойдет не так.

Для Mint 19 я могу подтвердить, что удаление snapd избавляет от “петлевых” записей в fdisk -l, blkid, mount и, вероятно, других командах.

Чтобы показать только монтирования, исключая петлевые устройства, вы также могли бы просто:

lsblk -af |grep -sv loop

😉

Как очистить старые версии Snap и удалить петлевые устройства?

Скрипт очистки snap

 #!/bin/sh
    set -eu
    
    LANG=C snap list --all | awk '/disabled/{print $1, $3}' |
        while read snapname revision; do
            snap remove "$snapname" --revision="$revision"
        done

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

Вопрос: «Почему все snaps монтируются и отображаются как блочные устройства или разделы в Ubuntu 18.04?»

Введение

Ubuntu 18.04 включает в себя систему управления пакетами Snap, которая используется для установки и управления приложениями. При использовании команд lsblk, fdisk -l и blkid, вы можете заметить, что в выводе отображаются устройства loop, которые связаны с установленными пакетами Snap. В этом ответе я подробно объясню причины такого поведения и предложу возможные решения проблемы с избытком информации о loop устройствах.

Причины появления устройства loop

  1. Архитектура Snap: Snap использует образы пакетов, которые монтируются как файловые системы squashfs. Эти образы представляют собой загруженные версии приложений и их зависимости.

  2. Виртуальные устройства: При установке Snap образ каждого приложения создает виртуальное блочное устройство в /dev/loop*. Это позволяет системе обращаться к этим образам как к обычным файловым системам, что обеспечивает изоляцию и управление библиотеками и зависимостями для каждого приложения.

  3. Хранение нескольких версий: Snap сохраняет предыдущие версии пакетов для обеспечения возможности отката на предыдущую стабильную версию приложения в случае возникновения проблем. Поэтому вы можете увидеть несколько loop устройств для одного и того же пакета. Например, в вашем случае команда snap list показывает наличие 6 установленный пакетов, но вывод lsblk выдает до 16 loop устройств, так как сохранены старые версии.

  4. Проблемы с очисткой: Хотя Snap и включает утилиты для очистки старых версий пакетов, могут возникнуть ситуации, когда старые версии не удаляются автоматически, что увеличивает количество loop устройств.

Как сократить clutter в выводе команд

Если количество loop устройств создает утраты в восприятии настоящих блочных устройств и разделов, стоит рассмотреть некоторые из следующих решений:

  1. Фильтрация вывода lsblk: Для того чтобы исключить loop устройства из вывода, вы можете использовать следующую команду:

    lsblk -o name,mountpoint,label,size,fstype,uuid | egrep -v "^loop"

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

  2. Использование parted: Команда parted -l покажет только реальные разделы и не будет включать loop устройства, что дает более чистый вывод.

  3. Удаление устаревших версий Snap: Для ручной очистки устаревших версий пакетов Snap используйте:

    LANG=C snap list --all | awk '/disabled/{print $1, $3}' |
       while read snapname revision; do
           snap remove "$snapname" --revision="$revision"
       done

    Этот скрипт поможет автоматически удалить старые версии пакетов, что в свою очередь уменьшит количество loop устройств.

  4. Удаление Snap (если он не нужен): Если вы не используете Snap, вы можете рассмотреть возможность его удаления:

    sudo apt purge snapd

    Однако, это стоит делать с осторожностью, чтобы не удалить необходимые приложения, которые могут зависеть от Snap.

Заключение

Система Snap на Ubuntu 18.04, хотя и предлагает множество преимуществ, может иногда создавать визуальный перегруз в выводе команд из-за большого количества loop устройств. Понимание причин и применение подходящих инструментов для фильтрации вывода может значительно упростить вашу работу с системными командами. Если у вас возникли дополнительные вопросы, не стесняйтесь их задавать!

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

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