LINUX.ORG.RU

kernel 4.3.1/4.4.0rc4 неведомая фигня с lvm

 ,


0

1

Есть тестовая система на базе слаки 14.х

Собрал на для ознакомления сначала 4.3.1 (потом 4.4.0rc4)

Не грузится, говорит нет у тебя корневого раздела! Не верю ему, запускаю

# vgscan                                                       
  Reading all physical volumes.  This may take a while...      
  No volume groups found                                     
# vgscan                                                    
  Reading all physical volumes.  This may take a while...
  Incorrect metadata area header checksum
  Incorrect metadata area header checksum                    
# vgscan                                                       
  Reading all physical volumes.  This may take a while...    
  No volume groups found                                     
# vgscan                                                       
  Reading all physical volumes.  This may take a while...      
  Found volume group "V0" using metadata type lvm2             
  WARNING: This metadata update is NOT backed up
# pvscan
umovestr: Input/output error                                 
  /dev/sda2: Checksum error                                  
  /dev/sdb2: Checksum error                                  
  /dev/sda2: Checksum error                                  
  /dev/sda2: Checksum error                                  
  /dev/sdb2: Checksum error                                  
  /dev/sdb2: Checksum error                                  
  PV /dev/sda2         lvm2 [461.76 GB]                      
  PV /dev/sdb2         lvm2 [476.69 GB]                      
  Total: 2 [938.45 GB] / in use: 0 [0   ] / in no VG: 2 [938.45 GB]
Я фигею! При каждом запуске разный результат.

«vgchange -ay» срабатывает на 3-5 раз, даже rootfs можно смонтировать после этого, но все равно не загружается из-за ошибок запуска init.

Весь что нужно для старта вкомпилено в ядро. С этим же initrd грузятся ядра от 3.4 до 4.1

google про все эти ошибки отсылает в 2007-2009 год с проблемами у древних ядер или описывает проблемы с поврежденными данными.

Есть предположения из-за чего эта фигня происходит?

★★★★★

Ответ на: комментарий от post-factum

А ты не бойся, солдат ребёнка не обидит.

anonymous
()
Ответ на: комментарий от post-factum

git bisect

Да я уж лучше подожду выхода 4.4.3 и потом посмотрю на ситуацию.

Есть подозрение, что что-то поменялось в sysfs

strace натравленный на «lvm pvscan» показывает что из sysfs читается пара каталогов и потом сообщается, что ничего нет.

С этим же ядром resque-образ грузится и все оборудование находит. т.е. udev работает. Проблема пока похоже только с lvm/dm.

vel ★★★★★
() автор топика
Ответ на: комментарий от vel

В 4.3.1? Да ладно? Вот тебе 4.3.2:

[~]$ ls /sys/class/block 
dm-0  dm-1  dm-2  dm-3  md0  sda  sda1  sdb  sdb1
[~]$ uname -a
Linux spock 4.3.0-pf2 #1 SMP PREEMPT Fri Dec 11 12:51:35 UTC 2015 x86_64 GNU/Linux
post-factum ★★★★★
()
Ответ на: комментарий от post-factum

теперь понятно куда копать.

Скорее всего какие-нибудь deprecated опции отключены

vel ★★★★★
() автор топика

У меня было подобное, но на Убунте. Я мог создать раздел, но при рестарте он переставал видиться. Оказалось, надо было установить пакет, который при запуске всё что нужно делал. Только это не писали в инструкциях :(

Dreamject
()
Ответ на: комментарий от post-factum

отключил sysfs.deprecated=0 и появился /sys/class/block/*

Не могу понять, что создает эффект с непостоянным результатом.

почти все lvm команды на 3-5-й раз показывают что все ОК!

vel ★★★★★
() автор топика
Ответ на: комментарий от post-factum

юзерспей обновлял совсе недавно. Да и 3.18/4.0/4.1 я уже без sysfs.deprecated использовал.

на x86_64 4.4.0-rc4 загрузилось без проблем!

проблема есть на x86. Интересно, что несколько раз смонтировав rootfs и сделав «hexdump -C /bin/ls | head -10» я полчал разное содержимое ( ни разу не .ELF )

vel ★★★★★
() автор топика
Ответ на: комментарий от post-factum

нет.

Все оказалось проще - выбор поддержки до 64Гб RAM что-то ломает. разница конфига

--- .config.work        2015-12-12 15:03:40.898038623 +0300
+++ .config     2015-12-12 15:54:25.764589249 +0300
-CONFIG_PGTABLE_LEVELS=2

+CONFIG_PGTABLE_LEVELS=3
+CONFIG_HAVE_ARCH_HUGE_VMAP=y
+CONFIG_SWIOTLB=y
+CONFIG_IOMMU_HELPER=y

-CONFIG_HIGHMEM4G=y

+CONFIG_HIGHMEM64G=y
+CONFIG_X86_PAE=y
+CONFIG_ARCH_PHYS_ADDR_T_64BIT=y
+CONFIG_ARCH_DMA_ADDR_T_64BIT=y
+CONFIG_ARCH_ENABLE_SPLIT_PMD_PTLOCK=y
+CONFIG_PHYS_ADDR_T_64BIT=y
+CONFIG_PCI_BUS_ADDR_T_64BIT=y
Похоже, что DMA сломан

Теперь понятно к какой подсистеме делать git bisect

vel ★★★★★
() автор топика
Последнее исправление: vel (всего исправлений: 1)
Ответ на: комментарий от post-factum

Проклятые дефайны в С!

#define PAGE_MASK (~(PAGE_SIZE-1))
для x86 это целое 32бит, а с PAE phys_addr_t 64 бита! по сему
pteval = (sg_phys(sg) & PAGE_MASK) | prot;
не позволял через DMA писать выше 4G

Автору коммита написал, если не откликнется, то придется самому патч постить. Весь патч 2 строки,

diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c
index f1042da..f9a7ebc 100644
--- a/drivers/iommu/intel-iommu.c
+++ b/drivers/iommu/intel-iommu.c
@@ -2159,7 +2159,7 @@ static int __domain_mapping(struct dmar_domain *domain, unsigned long iov_pfn,
                        sg_res = aligned_nrpages(sg->offset, sg->length);
                        sg->dma_address = ((dma_addr_t)iov_pfn << VTD_PAGE_SHIFT) + sg->offset;
                        sg->dma_length = sg->length;
-                       pteval = (sg_phys(sg) & PAGE_MASK) | prot;
+                       pteval = (sg_phys(sg) & (~(phys_addr_t)(PAGE_SIZE - 1)) | prot;
                        phys_pfn = pteval >> VTD_PAGE_SHIFT;
                }

А проблему создал коммит db0fa0cb015794dd19f664933d49c6ce902ec1e1 еще в августе

vel ★★★★★
() автор топика
Последнее исправление: vel (всего исправлений: 1)
Ответ на: комментарий от post-factum

Пофикшено в 4.4rc6

vel ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.