Неоднозначные принципы, которые направляют утилиту lsblk в удалении дубликатов отображаемых записей.

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

Linux Mint 20.3

Давайте найдем объяснение неоднозначному поведению утилиты lsblk, применяемой с опцией -E.
Вот вывод без применения опции -E.
Вы можете увидеть, что в колонке SIZE есть повторяющиеся записи. Это (loop0 loop2) и (loop6 loop10).

greg@mynt23:~$ lsblk -o NAME,SIZE        
NAME     SIZE
loop0  164,8M
loop1      4K
loop2  164,8M
loop3   55,4M
loop4   73,9M
loop5   66,2M
loop6    449M
loop7   91,7M
loop8   44,4M
loop9   40,9M
loop10   449M
loop11  74,1M
loop12  55,7M
sda    298,1G
├─sda1   4,9G
├─sda2 104,2G
└─sda3 189,1G

Теперь примените опцию -E.

greg@mynt23:~$ lsblk -o NAME,SIZE -E SIZE
NAME     SIZE
loop1      4K
loop3   55,4M
loop4   73,9M
loop5   66,2M
loop7   91,7M
loop8   44,4M
loop9   40,9M
loop11  74,1M
loop12  55,7M
sda    298,1G
├─sda1   4,9G
├─sda2 104,2G
└─sda3 189,1G

Повторяющиеся записи из колонки SIZE полностью исчезли, оставив одну “оригинальную” запись. Оставлены должны были быть loop0 и loop6.

Примените RM или TYPE в качестве ключа. Вы увидите, что все дубликаты удалены, но “оригинальная” запись осталась. В руководстве говорится, что дубликаты удаляются, а не дубликаты вместе с тем, что они дублируют.

Как это объяснить?

Из руководства по lsblk:

-E, --dedup column

Используйте колонку в качестве ключа для удаления дубликатов из выходного дерева. Если ключ недоступен для
устройства или если устройство является разделом, а родительское устройство-диск предоставляет тот же ключ, то устройство
всегда выводится.

Таким образом, удаление дубликатов по SIZE даст наблюдаемое поведение.

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

Вопрос о неоднозначных принципах, которыми руководствуется утилита lsblk при использовании опции -E для удаления дубликатов в выводимых записях, требует детального рассмотрения. Понимание утилиты lsblk и ее опций важно для пользователей Linux, работающих с разделами дисков и томами.

Теория

Утилита lsblk, представляющая собой сокращение от "list block devices," показывает информацию о всех блочных устройствах в системе. Среди различных опций, доступных в этой утилите, опция -E (или --dedup) привлекает внимание тем, что позволяет пользователю убирать дублирующие записи из вывода на основе указанного столбца.

Строка из man-страницы lsblk гласит:

-E, --dedup column Использует указанный столбец в качестве ключа для дедупликации выходного дерева. Если ключ недоступен для устройства или устройство является разделом, а родительское устройство предоставляет тот же ключ, то устройство всегда будет выведено.

Из этого следует, что lsblk будет использовать значение указанного столбца для идентификации и удаления дубликатов. Когда дубли определяются по значению в конкретном столбце (например, SIZE), утилита оставляет только первую встреченную запись, а остальные, считающиеся дубликатами по указанному критерию, убираются из вывода.

Пример

Рассмотрим предоставленный пример для better understand the behavior of -E option:

Без применения опции -E:

greg@mynt23:~$ lsblk -o NAME,SIZE        
NAME     SIZE
loop0  164,8M
loop1      4K
loop2  164,8M
loop3   55,4M
loop4   73,9M
loop5   66,2M
loop6    449M
loop7   91,7M
loop8   44,4M
loop9   40,9M
loop10   449M
loop11  74,1M
loop12  55,7M
sda    298,1G
├─sda1   4,9G
├─sda2 104,2G
└─sda3 189,1G

Здесь видно, что loop0 и loop2 имеют одинаковую величину размера (164,8М), как и loop6 и loop10 (449M).

С применением опции -E SIZE:

greg@mynt23:~$ lsblk -o NAME,SIZE -E SIZE
NAME     SIZE
loop1      4K
loop3   55,4M
loop4   73,9M
loop5   66,2M
loop7   91,7M
loop8   44,4M
loop9   40,9M
loop11  74,1M
loop12  55,7M
sda    298,1G
├─sda1   4,9G
├─sda2 104,2G
└─sda3 189,1G

Рассматривая поведение -E SIZE, мы видим, что удаляются все дубликаты, оставляя уникальные по значению размеры. Упоминание о том, что в выводе останутся только loop0 и loop6, является заблуждением. На самом деле, утилита сохраняет первый встреченный элемент и удаляет все последующие. В данном случае, идентичные по размеру loop2 и loop10 подверглись удалению.

Применение

Понимание и способность объяснять принципы действия утилиты является критичным для системных администраторов и IT-специалистов, которые работают с файловыми системами и нуждаются в их оптимизации и управлении. В частности, знание о -E опции может быть полезно, например, когда для документации или отчетности нужно собрать уникальные записи устройств по какой-то характеристике, чтобы избежать избыточности и сложностей восприятия.

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

В конечном итоге, понимание, что lsblk с -E проверяет только индекс первого появления значения для его сохранения в выводе и это поведение корректно описано в документации, избавляет пользователей от путаницы и позволяет эффективно использовать эту функциональность в профессиональной деятельности.

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

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