Bug 44837

Summary: Невозможно уменьшить раздел FAT32 в инсталяторе
Product: Sisyphus Reporter: Антон Мидюков <antohami>
Component: evmsAssignee: Олег Соловьев <mcpain>
Status: NEW --- QA Contact: qa-sisyphus
Severity: normal    
Priority: P5 CC: mcpain, mike
Version: unstable   
Hardware: all   
OS: Linux   
Attachments:
Description Flags
Лог evms (сборка с заданием 313129) none

Description Антон Мидюков 2023-01-07 17:44:07 MSK
Невозможно уменьшить раздел FAT32 в инсталяторе, инсталятор падает.
В /var/log/evms-engine.log:
_2_ FAT32: resize_fat: fatresize completed with exit code 1

Это на Сизифе падает. В p10 выдаёт сообщение Критическая ошибка - Операция невозможна.
Но сообщение в логе такое же. Видимо, падение связано с последними изменениями по избавлению от /dev/evms. Выше там такое сообщение:
_5_ Engine: is_volume_change_pending: Change pending: Volume /dev/evms/sdb1 needs to be shrunk.

В Сизифе в /dev/evms пусто.
Comment 1 Олег Соловьев 2023-01-09 10:24:21 MSK
На самом деле в аргументы fatresize вставляется vol->dev_node, который должен быть /dev/sdb1

В логи пишется vol->name и ради совместимости он оставлен без изменений, т.к. много чего на нём завязано в alterator-vm
Comment 2 Олег Соловьев 2023-01-10 13:57:54 MSK
Выяснилось, что fatresize 1.0.3 не умеет работать с /dev/dm-*

1.1.0 должен уметь, судя по описанию коммита
Comment 3 Slava Aseev 2023-01-11 14:45:07 MSK
(Ответ для Олег Соловьев на комментарий #2)
> 1.1.0 должен уметь, судя по описанию коммита

1.1.0, как оказалось, не умеет.

Когда fatresize получает имя устройства, например, /dev/sda3, он делает вот что (приблизительно):
- ищет устройство/диск (PedDisk), на котором находится партиция (/dev/sda);
- узнает номер партиции по числовому суффиксу (номер 3);
- получает PedPartition через вызов ped_disk_get_partition(disk, 3).

Для devmapper все это не работает (диска-родителя нету, числовой суффикс может быть от балды).
Но, как оказалось, libparted позволяет открывать devmapper устройства как PedDisk, и при этом первая партиция (PedPartition) на этом "диске" оказывается нашим искомым volume с FAT.

В общем, собрал fatresize 1.1.0 с фиксом, пока в testonly: https://git.altlinux.org/tasks/313129
Comment 4 Slava Aseev 2023-01-11 14:55:33 MSK
Несмотря на фикс devmapper, изменить размер у FAT на LVM LV (собранный в evms) все равно нельзя, т.к. evms кладет запрещенные прямые слэши в названия dm-устройств:
> The name "lvm2|vg|vg" should be mangled but it contains blacklisted characters
Comment 5 Slava Aseev 2023-01-11 14:59:22 MSK
(Ответ для Slava Aseev на комментарий #4)
> запрещенные прямые слэши
Напутал, имеется в виду пайп "|"
Comment 6 Антон Мидюков 2023-01-11 17:20:01 MSK
Created attachment 12268 [details]
Лог evms (сборка с заданием 313129)

(Ответ для Slava Aseev на комментарий #3)
> (Ответ для Олег Соловьев на комментарий #2)
> > 1.1.0 должен уметь, судя по описанию коммита
> 
> 1.1.0, как оказалось, не умеет.
> 
> Когда fatresize получает имя устройства, например, /dev/sda3, он делает вот
> что (приблизительно):
> - ищет устройство/диск (PedDisk), на котором находится партиция (/dev/sda);
> - узнает номер партиции по числовому суффиксу (номер 3);
> - получает PedPartition через вызов ped_disk_get_partition(disk, 3).
> 
> Для devmapper все это не работает (диска-родителя нету, числовой суффикс
> может быть от балды).
> Но, как оказалось, libparted позволяет открывать devmapper устройства как
> PedDisk, и при этом первая партиция (PedPartition) на этом "диске"
> оказывается нашим искомым volume с FAT.
> 
> В общем, собрал fatresize 1.1.0 с фиксом, пока в testonly:
> https://git.altlinux.org/tasks/313129

Собрал образ с заданием. Обычный раздел fat32 на ESP разделе (gpt) пробую уменьшить на 16 МБ, также прерывается.
Comment 7 Slava Aseev 2023-01-11 17:33:25 MSK
(Ответ для Антон Мидюков на комментарий #6)
> Создано вложение 12268 [details] [подробности]
> Лог evms (сборка с заданием 313129)
> 
> (Ответ для Slava Aseev на комментарий #3)
> > (Ответ для Олег Соловьев на комментарий #2)
> > > 1.1.0 должен уметь, судя по описанию коммита
> > 
> > 1.1.0, как оказалось, не умеет.
> > 
> > Когда fatresize получает имя устройства, например, /dev/sda3, он делает вот
> > что (приблизительно):
> > - ищет устройство/диск (PedDisk), на котором находится партиция (/dev/sda);
> > - узнает номер партиции по числовому суффиксу (номер 3);
> > - получает PedPartition через вызов ped_disk_get_partition(disk, 3).
> > 
> > Для devmapper все это не работает (диска-родителя нету, числовой суффикс
> > может быть от балды).
> > Но, как оказалось, libparted позволяет открывать devmapper устройства как
> > PedDisk, и при этом первая партиция (PedPartition) на этом "диске"
> > оказывается нашим искомым volume с FAT.
> > 
> > В общем, собрал fatresize 1.1.0 с фиксом, пока в testonly:
> > https://git.altlinux.org/tasks/313129
> 
> Собрал образ с заданием. Обычный раздел fat32 на ESP разделе (gpt) пробую
> уменьшить на 16 МБ, также прерывается.

Полагаю, здесь причина вот в чем:

fatresize -vvv -s 239951k /dev/dm-4 
fatresize 1.1.0 (20230111)
ped_device_get(/dev/dm-4)
fix partition number for devmapper device
ped_device_open()
ped_disk_new()
ped_disk_get_partition(1)
part(start=0, end=649215, length=649216)
ped_geometry_new(0)
ped_unit_parse(468654)
ped_geometry_duplicate()
ped_geometry_init(0, 468751)
snap_to_boundaries()
ped_file_system_open()
constraint_intersect_and_destroy()
ped_disk_set_partition_geom(0, 468750)
Resizing file system.
Warning: The file system can only be resized to this size by converting to FAT16.  If you convert to FAT16, and MS Windows is installed on this partition, then you must re-install the MS Windows boot loader.  If you want to do this, you should consult the Parted manual (or your distribution's manual).

OK/Cancel:
Comment 8 Slava Aseev 2023-01-11 18:28:23 MSK
(Ответ для Slava Aseev на комментарий #7)
> Warning: The file system can only be resized to this size by converting to
> FAT16.  If you convert to FAT16, and MS Windows is installed on this
> partition, then you must re-install the MS Windows boot loader.  If you want
> to do this, you should consult the Parted manual (or your distribution's
> manual).

Это, кстати, спрашивает именно libparted (не fatresize).
В libparted прибит минимальный размер для fat32 в 65520 кластеров. А также минимальный размер кластера в 4096 байт или 4 сектора. Отсюда и проблемы со всеми fat, которые под эти критерии не попадают.

Сама же fat в evms создается при помощи mkfs.fat, а у него таких ограничений нет. Если размер будет меньше 65520 кластеров, он просто уменьшит размер самого кластера (т.е. вместо 4 сектора на кластер будет 1).