Bug 28289

Summary: Восстановить функциональность live flash
Product: Sisyphus Reporter: Anton V. Boyarshinov <boyarsh>
Component: make-initrd-propagatorAssignee: Michael Shigorin <mike>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: blocker    
Priority: P3 CC: aen, boyarsh, evg, george, mike, rider, rom_as, zerg
Version: unstable   
Hardware: all   
OS: Linux   
URL: http://mjg59.dreamwidth.org/4957.html
Bug Depends on:    
Bug Blocks: 27685, 32476    
Attachments:
Description Flags
cdrom.c: probe sdX1 before sdX if that's sdX not srY none

Description Anton V. Boyarshinov 2012-12-28 10:17:50 MSK
Так как на x86_64 на загрузочных образах используется гибридная таблица разделов (gpt и mbr одновременно), создание раздела для хранения rw слайса надо переделать и сделать это оказалось не так элементарно, как казалось.
Comment 1 Michael Shigorin 2012-12-29 17:30:37 MSK
IMHO копать стоит в сторону parted; думаю попробовать.
Comment 2 AEN 2013-02-14 19:44:44 MSK
normal->critical
Критически важно для бета-версий.
Comment 3 Michael Shigorin 2013-02-19 21:56:04 MSK
Возможно, зависит от bug #27954.

Эксперименты пока опять застряли на том, что получающаяся на флэшке при вкатывании туда исошки таблица разделов (что MBR, что GPT) имеет довольно посредственное отношение к действительности, поскольку задача перед isohybrid/xorriso -isohybrid-* стоит "показать фирмвари что-нибудь загрузочное и обеспечить ядру возможность смонтировать squashfs из ISO9660".
Comment 4 Michael Shigorin 2013-02-21 00:01:00 MSK
Предлагаю для начала вернуть на i586, где заведомо MBR.
Comment 5 Michael Shigorin 2013-02-25 20:15:03 MSK
Этого оказалось недостаточно, т.к. /image монтируется с /dev/sdX (не раздела).

С другой стороны, таблица разделов кривая (например, с раздела размером "~100M" монтировался гигабайтный squashfs).  Собрал xorriso-1.2.6, где в ChangeLog упоминались схожие проблемы; смотрю.
Comment 6 Michael Shigorin 2013-02-25 22:59:00 MSK
(In reply to comment #5)
> /image монтируется с /dev/sdX
Надо доработать propagator с automatic=method:cdrom, чтобы научился в случае наличия sdX1 смотреть сперва на него.
Comment 7 AEN 2013-03-04 05:12:42 MSK
(В ответ на комментарий №6)
> (In reply to comment #5)
> > /image монтируется с /dev/sdX
> Надо доработать propagator с automatic=method:cdrom, чтобы научился в случае
> наличия sdX1 смотреть сперва на него.

надо. доработайте, пожалуйста.
Comment 8 Michael Shigorin 2013-03-16 00:02:03 MSK
Created attachment 5772 [details]
cdrom.c: probe sdX1 before sdX if that's sdX not srY

led@ доработал.
Comment 9 Michael Shigorin 2013-03-16 00:53:08 MSK
...но чуточку переоптимизировал в последний момент, пришлось загрубить:

-       size_t l = strlen(strcpy(device_fullname + 5, dev_name));
+       strcpy(device_fullname + 5, dev_name);
+       size_t l = strlen(device_fullname);

иначе проверялись имена устройств вроде "/de1".
Comment 10 led 2013-03-16 01:40:56 MSK
(В ответ на комментарий №9)
> ...но чуточку переоптимизировал в последний момент, пришлось загрубить:
> 
> -       size_t l = strlen(strcpy(device_fullname + 5, dev_name));
> +       strcpy(device_fullname + 5, dev_name);
> +       size_t l = strlen(device_fullname);
> 
> иначе проверялись имена устройств вроде "/de1".

Виноват, ступил: в голове ещё оставался старый вариант со strcat(device_fullname, dev_name), а в коде уже был новый вариант с strlen(strcpy(device_fullname + 5, dev_name)
Не, параллелить кодирование на два разных полушария мозга нужно осторожно - возможны рэйсы:)
Comment 11 Michael Shigorin 2013-03-16 23:34:43 MSK
Хотелось бы ещё узнать, зачем делается проверка automatic:label -- оставил её для случая метода disk, а добавленная в 0.17 обработка метода cdrom туда не смотрит.
Comment 12 Michael Shigorin 2013-03-16 23:38:24 MSK
GPT потребует отдельной возни -- текущие сизифные parted и gdisk конфузятся при виде isohybrid-ной таблицы разделов, первый из которых начинается с нулевого сектора, и отказываются с ней работать.

http://www.syslinux.org/archives/2010-March/014116.html
Comment 13 Repository Robot 2013-03-16 23:40:15 MSK
make-initrd-propagator-0.17-alt1 -> sisyphus:

* Sat Mar 16 2013 Michael Shigorin <mike@altlinux> 0.17-alt1
- accept cdrom for rw disk_slice on isohybrid media (closes: #28289)

* Thu Feb 21 2013 Michael Shigorin <mike@altlinux> 0.16-alt1
- reenable rw slice if it's not GPT (thus MBR)
- fixed annoying /etc/mtab related message
Comment 14 Michael Shigorin 2013-03-20 01:03:55 MSK
Для архива:
- см. тж. bug #21345 -- хорошо бы вспомнить, что было не так;
- http://www.altlinux.org/make-initrd-propagator;
- в 0.18 делаю для disk/cdrom реакцию при условии наличия в параметрах ядра
  ключевого слова "live_rw" (подсмотрено в m-p-d в р-не gf1bb7ce),
  т.к. по умолчанию при первой загрузке получаются немаленькие тормоза
  вследствие усиленного I/O по флэшке с приличной долей записи;
- создаю ext4 без журнала и монтирую с опциями[1] вместо ext3 с дефолтом
  (при этом загрузка всего вдвое медленней, чем без rw slice);
  см. тж. bug #28713.

Также хотелось бы уточнить критерии _создания_ и _подключения_ rw slice с флэшки -- ныне _создаётся_ при наличии "automatic:label=..." либо "live_rw" в параметрах загрузки ядра, а _подключается_ при наличии ФС с меткой alt-live-storage; возможно, подключение должно происходить при тех же условиях, что и создание.

Ну и надо учесть случай использования с NFS, который пока проверять не умею.

[1] noatime,nodiratime,commit=30,min_batch_time=100000,
    barrier=0,data=writeback,delalloc
Comment 15 Anton Farygin 2013-06-27 11:53:08 MSK
Не работает на последнем RC2 Simply i586.
во первых после записи через dd образа на flash fdisk выдаёт предупреждение что на ней есть GPT, хотя реально нет (corrupted GPT). 

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

Всё это воспроизводится на свежайшей бете Simply:

# cat /etc/altlinux-release 
Simply Linux 7.0.0  (Dory)
# uname -a
Linux localhost.localdomain 3.8.13.3-std-def-alt1.M70P.1 #1 SMP Fri Jun 21 06:25:57 UTC 2013 i686 GNU/Linux

# fdisk -l /dev/sdb

WARNING: GPT (GUID Partition Table) detected on '/dev/sdb'! The util fdisk doesn't support GPT. Use GNU Parted.


Disk /dev/sdb: 7747 MB, 7747397632 bytes, 15131636 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x7768d6c1

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *          64     1669119      834528   17  Hidden HPFS/NTFS
/dev/sdb2         1669120    15131635     6731258   83  Linux

# mount|grep /.rw
none on /.rw type tmpfs (rw,relatime,mode=755)

# blkid 
/dev/sda1: UUID="b6862c3b-9363-4194-a895-113a75d2abfd" TYPE="swap" 
/dev/sda2: UUID="65f8594e-84c0-47c7-8aeb-f5c7378bd31e" SEC_TYPE="ext2" TYPE="ext3" 
/dev/sdb1: UUID="2013-06-25-17-45-21-00" LABEL="Simply Linux 7.0.0  (Dory)" TYPE="iso9660" 
/dev/sdb2: LABEL="alt-live-storage" UUID="132aacf3-ae53-49b0-b649-48256ca9a3d4" TYPE="ext4" 
/dev/loop0: TYPE="squashfs" 
/dev/zram0: UUID="ff750c86-81c6-459b-afec-72a10b34dd9b" TYPE="swap"
Comment 16 AEN 2013-06-27 12:53:10 MSK
(В ответ на комментарий №15)
> Не работает на последнем RC2 Simply i586.
> во первых после записи через dd образа на flash fdisk выдаёт предупреждение что
> на ней есть GPT, хотя реально нет (corrupted GPT). 
> 
> во вторых, даже после создания раздела вручную он не монтируется как оверлей.
> 
> Всё это воспроизводится на свежайшей бете Simply:

showstopper. Будем разбираться.
Comment 17 Anton V. Boyarshinov 2013-06-27 13:32:53 MSK
(В ответ на комментарий №15)
> Не работает на последнем RC2 Simply i586.
> во первых после записи через dd образа на flash fdisk выдаёт предупреждение что
> на ней есть GPT, хотя реально нет (corrupted GPT). 
Странно, у меня это не наблюдается и раздел создаётся и форматирвется.

> во вторых, даже после создания раздела вручную он не монтируется как оверлей.
Не хватает модуля ext4 в initrd, сейчас исправлю.
Comment 18 Anton V. Boyarshinov 2013-06-27 14:09:21 MSK
Пересобрал образ, добавив ext4, сработало сразу без какого-либо шаманства с ручным созданием раздела..
Comment 19 AEN 2013-06-27 15:01:12 MSK
(В ответ на комментарий №18)
> Пересобрал образ, добавив ext4, сработало сразу без какого-либо шаманства с
> ручным созданием раздела..
Comment 20 AEN 2013-06-27 15:02:14 MSK
(В ответ на комментарий №19)
> (В ответ на комментарий №18)
> > Пересобрал образ, добавив ext4, сработало сразу без какого-либо шаманства с
> > ручным созданием раздела..

2boyarsh@, sem@
Прошу создать и выложить новые образы i586.
Comment 21 Anton Farygin 2013-06-27 20:41:43 MSK
live_rw не пришлось добавлять параметр ?

Посмотри код - там странности с GPT. Надо чинить - условие "fdisk -l|grep GPT" срабатывает, если на устройстве был когда-то GPT, а потом про него забыли и вкатили через dd образ.

Новый образ выложишь ? Может быть стоит сразу поправить и остальные замечания по поводу live_flash ?
Comment 22 Anton Farygin 2013-06-27 20:43:57 MSK
думаю, что с GPT воспроизведётся, если на USB flash  >8Gb через gdisk создать GPT таблицу с разделами, а потом залить на него live для Simply.
Comment 23 Anton V. Boyarshinov 2013-06-28 12:08:27 MSK
(В ответ на комментарий №22)
> думаю, что с GPT воспроизведётся, если на USB flash  >8Gb через gdisk создать
> GPT таблицу с разделами, а потом залить на него live для Simply.

Возможно. После релиза посмотрим. Вообще, мне кажется, что GPT на флэшке -- ситуация нечастая.
Comment 24 AEN 2013-06-28 12:15:12 MSK
(В ответ на комментарий №23)
> (В ответ на комментарий №22)
> > думаю, что с GPT воспроизведётся, если на USB flash  >8Gb через gdisk создать
> > GPT таблицу с разделами, а потом залить на него live для Simply.
> 
> Возможно. После релиза посмотрим. Вообще, мне кажется, что GPT на флэшке --
> ситуация нечастая.

Да. Но отразить ее в Release Notes стоит. Сэкономим время на ответы "нечастых" пользователей, по крайней мере будет куда дать ссылку.
Comment 25 Anton Farygin 2013-06-28 13:54:16 MSK
По поводу "нечастая" я не был бы так уверен.

Ещё раз: дело в том, что на Flash реально нет GPT. Её затёрли с помощью dd, и то, что находит fdisk - это не GPT, а его "ошлёпки".

Предлагаю просто убрать в коде проверку на GPT - врятли будет ситуация, когда после dd if=siply.iso of=/dev/sda на /dev/sda будет реальный GPT.
Comment 26 Anton Farygin 2013-06-28 14:55:30 MSK
на вчерашнем simply опять вылезло.

думаю, что на этот раз всё-таки виновато это сообщение:
# fdisk -l /dev/sdb

WARNING: GPT (GUID Partition Table) detected on '/dev/sdb'! The util fdisk doesn't support GPT. Use GNU Parted.


Disk /dev/sdb: 7747 MB, 7747397632 bytes
64 heads, 32 sectors/track, 7388 cylinders, total 15131636 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x7d1192ca

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *          64     1669119      834528   17  Hidden HPFS/NTFS

Надо игнорировать такое - gpt после записи Simply на /dev/sdb уже нет.
Comment 27 Anton Farygin 2013-06-28 14:56:20 MSK
# gdisk /dev/sdb
GPT fdisk (gdisk) version 0.7.0

Caution: invalid main GPT header, but valid backup; regenerating main header
from backup!

Caution! After loading partitions, the CRC doesn't check out!
Warning! One or more CRCs don't match. You should repair the disk!

Partition table scan:
  MBR: MBR only
  BSD: not present
  APM: not present
  GPT: damaged

Found valid MBR and corrupt GPT. Which do you want to use? (Using the
GPT MAY permit recovery of GPT data.)
 1 - MBR
 2 - GPT
 3 - Create blank GPT
Comment 28 Anton V. Boyarshinov 2013-06-28 15:39:39 MSK
(В ответ на комментарий №25)

> Предлагаю просто убрать в коде проверку на GPT - врятли будет ситуация, когда
> после dd if=siply.iso of=/dev/sda на /dev/sda будет реальный GPT.

Если это будет simply x86_64, то именно gpt там и будет.
Comment 29 Anton Farygin 2013-06-28 16:09:06 MSK
GPT будет в гибридном ISO ?

Тогда получается что на x86_64 у нас не работает live_rw ?
Comment 30 Anton V. Boyarshinov 2013-06-28 16:22:07 MSK
(В ответ на комментарий №29)
> GPT будет в гибридном ISO ?
> 
> Тогда получается что на x86_64 у нас не работает live_rw ?

Да, не работает и это документировано. Задача модификации дважды гибридного образа CD+MBR+GPT пока  не решена.
Comment 31 Michael Shigorin 2014-01-28 00:47:44 MSK
*** Bug 29706 has been marked as a duplicate of this bug. ***
Comment 32 Michael Shigorin 2014-01-28 21:46:35 MSK
(В ответ на комментарий №14)
> Для архива:
И ещё: командную строку ядра модифицирует gfxboot, если есть.

Например, в kdesktop-7.0.0 содержится:
append initrd=alt0/full.cz live lowmem fastboot splash stagename=live quiet=1 showopts

При загрузке получаем:
initrd=alt0/full.cz live lowmem fastboot splash stagename=live quiet=1 vga=normal lang=ru_RU automatic=method:disk,label:ALT*

А ещё в mkimage-profiles почти год как содержится 32live_rw.cfg, указывающий automatic=method:cdrom вместо automatic=method:disk,label:ALT* live_rw.  Плюс аналогично и в mkimage::tools/mki-copy-efiboot.

При BIOS получается выкрутиться нормально, а вот при UEFI-загрузке из-за того, что образ El Torito одновременно подсовывается и как FAT-раздел -- elilo.conf используется один и тот же.  Пока в раздумьях, вообще это бы в refind разделять -- там есть информация о том, что за устройство.
Comment 33 Michael Shigorin 2014-03-17 20:58:45 MSK
На x86_64/BIOS трудами boyarsh@ работает (если не ошибаюсь, с 0.23-alt1 -- вошло в 7.0.3).

На UEFI это отдельная фича и пока похоже, что делать её стоит в refind. Отправил FR.  Возможно, с нас патч.
Comment 34 Michael Shigorin 2015-03-06 21:54:57 MSK
На самом деле доработка propagator коммитами 4d66f07, 13019ba оказалась немножко переоптимизированной и содержала off-by-5, в итоге обнаруженный ldv@:
http://git.altlinux.org/gears/p/propagator.git?p=propagator.git;a=commitdiff;h=c011d5e337f98f64d0aed824af9c12189ab48eaf

2 zerg: можно выкинуть из design-bootloader-source тот жуткий хак с превращением "automatic=method:cdrom" в "automatic=method:disk,label:ALT*", вообще говоря.
Comment 35 Michael Shigorin 2015-03-09 19:22:23 MSK
Должно быть исправлено в propagator-20150306-alt1.
Кстати, текущий fdisk научился и GPT...
Comment 36 Sergey V Turchin 2016-10-04 13:26:25 MSK
(В ответ на комментарий №34)
> 2 zerg:
Ога, прочитал, придя из bug#32562 :-)