Bug 28289 - Восстановить функциональность live flash
: Восстановить функциональность live flash
Status: CLOSED FIXED
: Sisyphus
(All bugs in Sisyphus/make-initrd-propagator)
: unstable
: all Linux
: P3 blocker
Assigned To:
:
: http://mjg59.dreamwidth.org/4957.html
:
:
: 27685 32476
  Show dependency tree
 
Reported: 2012-12-28 10:17 by
Modified: 2016-10-04 13:26 (History)


Attachments
cdrom.c: probe sdX1 before sdX if that's sdX not srY (1.19 KB, patch)
2013-03-16 00:02, Michael Shigorin
no flags Details | Diff


Note

You need to log in before you can comment on or make changes to this bug.


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

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

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

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

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

-       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 From 2013-03-16 01:40:56 -------
(В ответ на комментарий №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 From 2013-03-16 23:34:43 -------
Хотелось бы ещё узнать, зачем делается проверка automatic:label -- оставил её
для случая метода disk, а добавленная в 0.17 обработка метода cdrom туда не
смотрит.
------- Comment #12 From 2013-03-16 23:38:24 -------
GPT потребует отдельной возни -- текущие сизифные parted и gdisk конфузятся при
виде isohybrid-ной таблицы разделов, первый из которых начинается с нулевого
сектора, и отказываются с ней работать.

http://www.syslinux.org/archives/2010-March/014116.html
------- Comment #13 From 2013-03-16 23:40:15 -------
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 From 2013-03-20 01:03:55 -------
Для архива:
- см. тж. 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 From 2013-06-27 11:53:08 -------
Не работает на последнем 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 From 2013-06-27 12:53:10 -------
(В ответ на комментарий №15)
> Не работает на последнем RC2 Simply i586.
> во первых после записи через dd образа на flash fdisk выдаёт предупреждение что
> на ней есть GPT, хотя реально нет (corrupted GPT). 
> 
> во вторых, даже после создания раздела вручную он не монтируется как оверлей.
> 
> Всё это воспроизводится на свежайшей бете Simply:

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

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

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

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

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

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

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

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

Предлагаю просто убрать в коде проверку на GPT - врятли будет ситуация, когда
после dd if=siply.iso of=/dev/sda на /dev/sda будет реальный GPT.
------- Comment #26 From 2013-06-28 14:55:30 -------
на вчерашнем 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 From 2013-06-28 14:56:20 -------
# 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 From 2013-06-28 15:39:39 -------
(В ответ на комментарий №25)

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

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

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

Да, не работает и это документировано. Задача модификации дважды гибридного
образа CD+MBR+GPT пока  не решена.
------- Comment #31 From 2014-01-28 00:47:44 -------
*** Bug 29706 has been marked as a duplicate of this bug. ***
------- Comment #32 From 2014-01-28 21:46:35 -------
(В ответ на комментарий №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 From 2014-03-17 20:58:45 -------
На x86_64/BIOS трудами boyarsh@ работает (если не ошибаюсь, с 0.23-alt1 --
вошло в 7.0.3).

На UEFI это отдельная фича и пока похоже, что делать её стоит в refind.
Отправил FR.  Возможно, с нас патч.
------- Comment #34 From 2015-03-06 21:54:57 -------
На самом деле доработка 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 From 2015-03-09 19:22:23 -------
Должно быть исправлено в propagator-20150306-alt1.
Кстати, текущий fdisk научился и GPT...
------- Comment #36 From 2016-10-04 13:26:25 -------
(В ответ на комментарий №34)
> 2 zerg:
Ога, прочитал, придя из bug#32562 :-)