<?xml version="1.0" encoding="UTF-8" ?>

<bugzilla version="5.2"
          urlbase="https://bugzilla.altlinux.org/"
          
          maintainer="jenya@basealt.ru"
>

    <bug>
          <bug_id>11419</bug_id>
          
          <creation_ts>2007-04-08 21:01:48 +0400</creation_ts>
          <short_desc>libblkid does not recognize md components</short_desc>
          <delta_ts>2007-04-09 16:42:32 +0400</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Development</classification>
          <product>Sisyphus</product>
          <component>libblkid</component>
          <version>unstable</version>
          <rep_platform>all</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>CLOSED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Shigorin">mike</reporter>
          <assigned_to name="Alexey Gladkov">legion</assigned_to>
          <cc>boyarsh</cc>
    
    <cc>eostapets</cc>
    
    <cc>glebfm</cc>
    
    <cc>ldv</cc>
    
    <cc>legion</cc>
    
    <cc>placeholder</cc>
    
    <cc>sbolshakov</cc>
    
    <cc>vsu</cc>
    
    <cc>vt</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>48420</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Shigorin">mike</who>
    <bug_when>2007-04-08 21:01:48 +0400</bug_when>
    <thetext>Если raid0 не поднят в initrd, то первая попытка swapon не удастся; это только
косметическая проблема, но вот вторая попытка тоже не пройдёт -- swapon
схватится по UUID за половинку RAID0:

--- /proc/mdstat
Personalities : [raid1] [raid0] 
md1 : active raid1 hdb1[1] hda1[0]
      4192832 blocks [2/2] [UU]
      
md2 : active raid0 hda2[0] hdb2[1]
      12578688 blocks 32k chunks
      
unused devices: &lt;none&gt;

--- /etc/fstab
UUID=9ca180d9-1d32-4a1e-9d44-d1aa6e7ba5b1       swap    swap    defaults00

--- blkid
/dev/hda1: UUID=&quot;ba18fb57-92b3-4aef-bc67-982e2eee754a&quot; SEC_TYPE=&quot;ext2&quot; TYPE=&quot;ext3&quot; 
/dev/hda2: UUID=&quot;9ca180d9-1d32-4a1e-9d44-d1aa6e7ba5b1&quot; TYPE=&quot;swap&quot; 
/dev/hdb1: UUID=&quot;ba18fb57-92b3-4aef-bc67-982e2eee754a&quot; SEC_TYPE=&quot;ext2&quot; TYPE=&quot;ext3&quot; 
/dev/md1: UUID=&quot;ba18fb57-92b3-4aef-bc67-982e2eee754a&quot; SEC_TYPE=&quot;ext2&quot; TYPE=&quot;ext3&quot; 
/dev/md2: UUID=&quot;9ca180d9-1d32-4a1e-9d44-d1aa6e7ba5b1&quot; TYPE=&quot;swap&quot; 

Чем дальше, тем меньше понимаю -- зачем делать неуникальные уникальные
идентификаторы, тем более для страйпов? :(

См. тж. #11282, #11283</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>48425</commentid>
    <comment_count>1</comment_count>
    <who name="Sergey Vlasov">vsu</who>
    <bug_when>2007-04-08 22:01:33 +0400</bug_when>
    <thetext>В libblkid есть функция check_mdraid(), которая должна определять компоненты
массива, чтобы не пытаться искать на них ФС. Получается, что эта функция не
работает.

И я, кажется, понял, почему она не работает:

lseek(3, 8225161216, SEEK_SET)          = 8225161216
read(3, &quot;\374N+\251\0\0\0\0Z\0\0\0\1\0\0\0\0\0\0\0w%\276\225\330&quot;..., 4096) = 4096

...

        /* Check for magic number */
        if (memcmp(&quot;\251+N\374&quot;, buf, 4))
                return -BLKID_ERR_PARAM;

Вот как выглядит работающая проверка в libvolume_id:

#define MD_MAGIC			&quot;\xfc\x4e\x2b\xa9&quot;
#define MD_MAGIC_SWAP			&quot;\xa9\x2b\x4e\xfc&quot;
...
	if ((memcmp(mdp-&gt;md_magic, MD_MAGIC, 4) != 0) &amp;&amp;
	    (memcmp(mdp-&gt;md_magic, MD_MAGIC_SWAP, 4) != 0))
		return -1;

К сожалению, суперблоки 0.90 в md host-endian (причём в ядре даже не делается
никаких попыток обеспечить совместимость с чужим порядком байтов). Впрочем, для
libblkid нужны только поля magic и uuid (в котором байты переставлять не нужно).

Кстати, суперблоки версии 1.x используют тот же magic, но всегда little endian и
находятся в других местах (1.0 - в конце устройства, но расчёт смещения
отличается от 0.9; 1.1 - в начале устройства; 1.1 - со смещением 4KB от начала).
Сейчас такие суперблоки не поддерживаются даже в libvolume_id.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>48427</commentid>
    <comment_count>2</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2007-04-08 22:14:48 +0400</bug_when>
    <thetext>2vsu: спасибо, жду патч.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>48430</commentid>
    <comment_count>3</comment_count>
    <who name="Sergey Vlasov">vsu</who>
    <bug_when>2007-04-08 22:57:05 +0400</bug_when>
    <thetext>Да того патча...

http://git.altlinux.org/people/vsu/packages/?p=e2fsprogs.git;a=commitdiff;h=fdfae2006f43cd413541e5867df9b27ccdcd87c1

Теперь для компонентов массива определяется TYPE=&quot;mdraid&quot;; правда, UUID
отображается неправильно (впрочем, в mdadm.conf он всё равно записывается в
другой форме - в виде 4 32-разрядных чисел, разделённых &apos;:&apos;).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>48433</commentid>
    <comment_count>4</comment_count>
    <who name="Sergey Vlasov">vsu</who>
    <bug_when>2007-04-08 23:25:36 +0400</bug_when>
    <thetext>Впрочем, UUID я тоже поправил по крайней мере до совпадения с выводом
/lib/udev/vol_id. В принципе можно приблизить вывод и к выводу mdadm, если
переставить байты в 32-разрядных словах в соответствии с порядком байтов во всём
суперблоке (который можно определить по magic) - тогда разница с mdadm будет в
расположении разделителей в UUID.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>48434</commentid>
    <comment_count>5</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2007-04-08 23:37:35 +0400</bug_when>
    <thetext>Если изменить вывод, то сломается обратная совместимость с уже заполненным
fstab&apos;ом?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>48444</commentid>
    <comment_count>6</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2007-04-09 00:39:45 +0400</bug_when>
    <thetext>Fixed in 1.39-alt4.
http://git.altlinux.org/people/ldv/packages/?p=e2fsprogs.git;a=commit;h=1.39-alt4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>48471</commentid>
    <comment_count>7</comment_count>
    <who name="Sergey Vlasov">vsu</who>
    <bug_when>2007-04-09 12:31:32 +0400</bug_when>
    <thetext>(In reply to comment #5)
&gt; Если изменить вывод, то сломается обратная совместимость с уже заполненным
&gt; fstab&apos;ом?

Этот UUID не используется в fstab - только в mdadm.conf. Сломаться может разбор
вывода blkid в каких-то программах, не ожидающих в этом поле вывод в формате
mdadm (хотя с учётом наличия vfat, где формат UUID совершенно другой, это
маловероятно).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>48472</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2007-04-09 12:41:11 +0400</bug_when>
    <thetext>В alterator-install2 я использую blkid для конвертации device -&gt; UUID. 

/sbin/blkid -o value -s UUID &quot;$devname&quot;

Вывод от этой команды передаётся lilo (root=&quot;UUID=...&quot;, boot=...).
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>48502</commentid>
    <comment_count>9</comment_count>
    <who name="Sergey Vlasov">vsu</who>
    <bug_when>2007-04-09 16:42:32 +0400</bug_when>
    <thetext>(In reply to comment #8)
&gt; В alterator-install2 я использую blkid для конвертации device -&gt; UUID. 
&gt; 
&gt; /sbin/blkid -o value -s UUID &quot;$devname&quot;
&gt; 
&gt; Вывод от этой команды передаётся lilo (root=&quot;UUID=...&quot;, boot=...).

Теперь эта команда в случае применения к устройству, содержащему компонент
массива md, будет выдавать UUID массива (раньше в такой ситуации как минимум для
raid1 выдавался UUID файловой системы).

Кстати, &quot;UUID&quot;, используемые в md, строго говоря, не являются правильными UUID с
точки зрения libuuid - в md это просто 128-байтовые случайные числа, не
содержащие поля типа, как OSF DCE UUID; поэтому представление этих
идентификаторов в виде UUID не вполне корректно.</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>