Bug 54497 - Некорректно проверяется, removable ли диск
Summary: Некорректно проверяется, removable ли диск
Status: ASSIGNED
Alias: None
Product: Sisyphus
Classification: Development
Component: system-backup (show other bugs)
Version: unstable
Hardware: x86_64 Linux
: P5 normal
Assignee: Leonid Krivoshein
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2025-05-27 15:21 MSK by Artem Varaksa
Modified: 2025-12-30 17:09 MSK (History)
1 user (show)

See Also:


Attachments
Вывод system-backup -v (с -r и без него) (7.55 KB, text/plain)
2025-06-19 13:43 MSK, Artem Varaksa
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Artem Varaksa 2025-05-27 15:21:22 MSK
Шаги
====

1. # apt-get install -y system-backup
2. # bash -x system-backup -b "/home/test/backup_test" -C -v

Фактический результат
=====================

> ...
> + '[' 0 -eq 0 -a -r /sys/devices/pci0000:00/0000:00:05.0/0000:01:01.0/virtio4/host2/target2:0:0/2:0:0:0/block/sda/sda3/removable ']'
> ...

Но такого файла не существует. Например:

# export DEV_NAME="sda" PARTITION="3" && \
    MAJOR=$(udevadm info "/dev/$DEV_NAME" | grep MAJOR | sed -r 's|.*=||') && \
    MINOR=$(udevadm info "/dev/$DEV_NAME" | grep MINOR | sed -r 's|.*=||') && \
    SYSPATH=$(readlink -fv "/sys/dev/block/${MAJOR}:${MINOR}/") && \
    echo "SYSPATH=$SYSPATH" && \
    cat "${SYSPATH}/${DEV_NAME}${PARTITION}/removable"

> SYSPATH=/sys/devices/pci0000:00/0000:00:05.0/0000:01:02.0/virtio5/host9/target9:0:0/9:0:0:1/block/sda
> cat: '/sys/devices/pci0000:00/0000:00:05.0/0000:01:02.0/virtio5/host9/target9:0:0/9:0:0:1/block/sda/sda3/removable': Нет такого файла или каталога

Вместо этого есть файл без `/sda3`:

# cat /sys/devices/pci0000:00/0000:00:05.0/0000:01:02.0/virtio5/host9/target9:0:0/9:0:0:1/block/sda/removable
> 0

Проверял и с флешкой, у которой выводит 1.

Ввиду этой ошибки никакие устройства не считаются removable, таким образом опция --removable не требуется даже для флешек и т. п.

Ожидаемый результат
===================

Корректная проверка, является ли устройство removable, без указания раздела в пути.

Воспроизводимость
=================

Воспроизводится на виртуальных машинах:

[sisyphus] [p11+384293] system-backup-0.1.4-alt1
ALT Server 11.0 beta20250213 x86_64

[p11] system-backup-0.1.1-alt3
ALT Server 11.0 beta20250213 x86_64
Comment 1 Leonid Krivoshein 2025-05-27 17:53:58 MSK
То, что я здесь вижу, пока кажется вполне логичным. Логика с removable рассчитана на сканирование дисков, а не разделов. Съёмные диски по умолчанию должны исключаться, если не добавлен флаг --removable.

Команда lsblk без параметров покажет все диски и разделы, а так же флаг RM.

Вот эти диски system-backup должна пропускать вместе с разделами на них, так что нужно увидеть вывод lsblk.
Comment 2 Leonid Krivoshein 2025-05-27 18:00:50 MSK
(In reply to Artem Varaksa from comment #0)
> 2. # bash -x system-backup -b "/home/test/backup_test" -C -v
Кроме того, опция -C (--current, --self) предписывает не сканировать диски, а рассматривать текущую rootfs, с которой мы загрузились, как ту, на которой надо искать /etc/fstab. В этом случае флаг --removable действительно не должен никак влиять. Мне кажется, это не ошибка.
Comment 3 Artem Varaksa 2025-05-27 19:06:22 MSK
В данном случае привёл пример с не-removable носителем (встроенным диском). Даже для него логика неправильная, так как пытается смотреть .../sda/sda3/removable вместо .../sda/removable.

Для такого диска # lsblk, ожидаемо, выводит в столбце RM 0:

# lsblk
> NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
> sda      8:0    0   25G  0 disk
> ├─sda1   8:1    0  511M  0 part /boot/efi
> ├─sda2   8:2    0  742M  0 part [SWAP]
> └─sda3   8:3    0 23,8G  0 part /
> sdb      8:16   0   50G  0 disk
> └─sdb1   8:17   0   50G  0 part

С флешкой # lsblk выводит в столбце RM 1. Но у неё так же нет файла вида .../sdс/sdс3/removable, есть только .../sdс/removable, в связи с чем сделал вывод, что и с флешкой removable будет некорректно определяться.

Сразу не проверил поведение именно при запуске system-backup с флешкой, на которой есть установленная система, проверю и опишу его.
Comment 4 Leonid Krivoshein 2025-05-27 19:36:09 MSK
Когада мы запускаем system-backup без свободных аргументов и без параметра -C (--current, --self), мы как бы говорим "сохрани систему, которую найдёшь". В этом случае работает сканирование всех дисков и только в этом случае параметр --removable имеет смысл, так как при сканировании по умолчанию съёмные носители исключаются. Когда же мы указываем system-backup явно на то, что мы хотим сохранить, она не должна ничего исключать, в этом случае параметр --removable не имеет смысла.
Comment 5 Artem Varaksa 2025-05-28 14:14:49 MSK
Спасибо за уточнение.

Проверил такой случай, когда кроме запущенной с флешки системы других систем нет, в нём вне зависимости от параметра -r авто-поиск системы (без указания -C и -U) не работает. Завёл отдельную ошибку об этом: https://bugzilla.altlinux.org/54517.

В данной ошибке всё же хочу обратить внимание, что даже при такой проверке обращения происходят к `.../sda/sda1/removable`, а не `.../sda/removable`, что видно при запуске с `bash -x` команд из упомянутой ошибки. Если этот момент следует считать ожидаемым поведением, просьба закрыть данную ошибку.

> ...
> ++ readlink -fv /sys/dev/block/8:1
> + sysfs=/sys/devices/pci0000:00/0000:00:14.0/usb2/2-4/2-4:1.0/host0/target0:0:0/0:0:0:0/block/sda/sda1
> + '[' '!' -r /sys/devices/pci0000:00/0000:00:14.0/usb2/2-4/2-4:1.0/host0/target0:0:0/0:0:0:0/block/sda/sda1/dev ']'
> + read b
> + '[' 8:1 '!=' 8:1 ']'
> + '[' -r /sys/devices/pci0000:00/0000:00:14.0/usb2/2-4/2-4:1.0/host0/target0:0:0/0:0:0:0/block/sda/sda1/ro ']'
> + read b
> + '[' 0 '!=' 0 ']'
> + '[' 0 -eq 0 ']'
> + '[' -r /sys/devices/pci0000:00/0000:00:14.0/usb2/2-4/2-4:1.0/host0/target0:0:0/0:0:0:0/block/sda/sda1/removable ']'
> ...
Comment 6 Leonid Krivoshein 2025-05-29 03:44:15 MSK
(In reply to Artem Varaksa from comment #5)
> Проверил такой случай, когда кроме запущенной с флешки системы других систем
> нет, в нём вне зависимости от параметра -r авто-поиск системы (без указания
> -C и -U) не работает.
Когда нет других систем, приходится бэкапить текущую корневую систему, это можно сделать только с -C/--current. Иначе всё к нему относящееся должно быть исключено из сканирования.

> В данной ошибке всё же хочу обратить внимание, что даже при такой проверке
> обращения происходят к `.../sda/sda1/removable`, а не `.../sda/removable`,
> что видно при запуске с `bash -x` команд из упомянутой ошибки. Если этот
> момент следует считать ожидаемым поведением, просьба закрыть данную ошибку.
Речь об этом фрагменте:
https://git.altlinux.org/gears/s/system-backup.git?p=system-backup.git;a=blob;f=system-backup;h=ce2607dbb3a60aead97609db1b0c37704af203f2;hb=23ae9f07867e62b2f2064cb9b61ce49e600eb424#l658
со строки 690. Сейчас кажется, что можно считать ошибкой, а можно и не считать. Если считать, то очень незначительной, по сравнению с другими накопившимися претензиями к system-backup, из-за чего я его полностью переделываю.

Можно не считать, потому что цель фрагмента в строках 690-696 исключать из сканирования те устройства, которые непосредственно помечены как съёмные, если ключ -r/--removable не был указан.

Можно считать, потому что для разделов или вложенных сущностей надо смотреть в другом месте. Тогда алгоритм надо значительно усложнять.

Склоняюсь к тому, что пока не найдено однозначно плохого проявления, лучше ничего не трогать. Вообще интересно, что покажет lsblk для раздела на съёмном устройстве в графе RM. Ей вообще не всегда можно доверять, сейчас проверил и вот:

NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda           8:0    0   4.5T  0 disk 
└─sda1        8:1    0   4.5T  0 part /media/klark/WD-Elements-5T
nvme0n1     259:0    0 953.9G  0 disk 
├─nvme0n1p1 259:1    0   256M  0 part /boot/efi
├─nvme0n1p2 259:2    0    48G  0 part [SWAP]
├─nvme0n1p3 259:3    0   875G  0 part /home
└─...

Здесь по USB3 подключен внешний Western Digital Elements 5TB, это съёмный диск.

Пока не будем закрывать, пусть висит...
Comment 7 Artem Varaksa 2025-05-29 10:35:57 MSK
Да, внешние диски почему-то не определяются как removable системой, об этом завёл ошибки:

- https://bugzilla.altlinux.org/54500 (Внешний NVME диск не определяется как removable)

- https://bugzilla.altlinux.org/54501 (Нельзя сделать диск removable с помощью правил udev)
Comment 8 Artem Varaksa 2025-06-19 13:43:13 MSK
Created attachment 18859 [details]
Вывод system-backup -v (с -r и без него)

> Можно не считать, потому что цель фрагмента в строках 690-696 исключать из сканирования те устройства, которые непосредственно помечены как съёмные, если ключ -r/--removable не был указан.

Перепроверил с учётом https://bugzilla.altlinux.org/show_bug.cgi?id=54517#c3, т. е. загрузился со встроенного диска, подключил флешку (определяющуюся как removable) с установленной на ней системой, и начал резервную копию без явного указания цели.

Как без -r, так и с ним резервная копия выполняется с флешки. Т. е. проверка всё же работает некорректно.

В выводе -v видно, что /dev/sda определяется как removable и пропускается, если не указывать -r:

> Auto-detecting targets...
>   - /dev/nvme0n1 protected directly
>   - /dev/nvme0n1p3 protected directly
>   - /dev/sda is removable, will be skipped

Однако пропускается только сам /dev/sda, разделы не пропускаются, и начинается резервная копия.

Подробный вывод system-backup см. во вложении.


Данное поведение проверялось на:

[p10+384295] ALT Workstation 10.4 x86_64
system-backup-0.1.4-alt1.noarch
Comment 9 Leonid Krivoshein 2025-06-21 00:11:55 MSK
Понятно, спасибо.
В новой версии будем учитывать "съёмность" только дисков верхнего уровня.
Comment 10 Artem Varaksa 2025-12-30 17:01:03 MSK
Актуально для system-backup-0.1.5-alt2.noarch.
Comment 11 Leonid Krivoshein 2025-12-30 17:07:42 MSK
(In reply to Artem Varaksa from comment #10)
> Актуально для system-backup-0.1.5-alt2.noarch.
Под новой версией я имел ввиду переписать вс
Comment 12 Leonid Krivoshein 2025-12-30 17:09:57 MSK
(In reply to Artem Varaksa from comment #10)
> Актуально для system-backup-0.1.5-alt2.noarch.
Под новой версией я имел ввиду переписать всё кардинально, пока лишь экстренно срочные потребности закрываются, чтобы довести деплойную пару хоть до какого-то юзабельного состояния. Текущая версия монолитна и имеет много других недостатков.