BusyBox, почему у тебя нет vi ?!
Резюме:
Сервер Ubuntu 14.04 после обновления при первой загрузке загружается только в initramfs BusyBox v1.21.1 с «отказом от ожидания корневого устройства» из-за отсутствия / dev / mapper / xxx-root, поскольку не может найти / смонтировать LVM VG из-за неправильного фильтра исключения в lvm.conf
Сценарий:
Деталь:
На 100% уверен, что проблема заключается в неправильном фильтре LVM (плохая настройка устройства обратной связи OpenStack Cinder для LVM), следовательно, не выполняется сканирование для LVM VG. Известная работа должна быть по умолчанию в lvm.conf:
filter = [ "a/.*/" ]
Однако это закомментировано и вместо этого содержится в lvm.conf:
filter = [ "a/sda1/", "a/sdb/", "r/.*/"]
Если я могу внести изменения в lvm.conf, выполнив поиск неправильной строки и заменив строку правильной строкой в lvm.conf, тогда я считаю, что LVM VG загрузится правильно.
Попытка решения:
В initramfs нет редактирования (vi, vim, nano и т. д.), только sed пробовал тестировать регулярное выражение sed, к сожалению, это невероятно сложно взломать для этого noob регулярного выражения. У меня пока:
sed -i '/filter = [ "a/sda1/", "a/sdb/", "r/.*/"]/c\filter = [ "a/.*/" ]' /etc/lvm/lvm.conf
что не вносит изменений в тестовый файл. У меня проблемы с пониманием сложности косой черты, содержащейся в строке поиска / замены sed в сочетании с синтаксисом косой черты команды sed, может быть, кто-то может здесь помочь? Если я смогу взломать регулярное выражение команды sed, я почти уверен, что ядро сможет загрузиться в LVM.
В качестве альтернативы, есть ли принудительное / ручное монтирование, которое я мог бы использовать (из grub edit или initramfs), несмотря на неправильный фильтр lvm.conf, что это?
В качестве запасного варианта я мог бы пойти по пути MaaS (загрузка образа PXE / tftp через Интернет в Ubuntu), который я настроил на другом сервере в DC, но еще не тестировал и не использовал. Я счастлив попытаться запустить новый сервер Ubuntu 14.04 на незагружающуюся систему с помощью MaaS.
Более желательно правильное редактирование lvm.conf путем взлома sed сначала в BusyBox. Я хотел бы понять это на будущее или какие-либо другие предложения? Отредактируйте в grub, загрузите LVM VG вручную или примите любые другие предложения, которые помогут. Спасибо.
Последующее редактирование:
(не уверен, что здесь лучше всего использовать serverfault, нужно ли мне отвечать на свой вопрос или все равно внести это изменение ..)
Большое спасибо mvillar за руководство по sed. Хорошо, вот последний синатакс и шаги, которые спасли мой бекон от незагружаемой системы (только для BusyBox) из-за ошибки в конфигурации фильтра lvm.conf. Сначала я использовал следующую команду sed для двойной проверки правильности синтаксиса до и после изменения на '# выводить только строки, соответствующие регулярному выражению (имитирует "grep")':
sed -n '/loop/p' /etc/lvm/lvm.conf
Источник: http://www.catonmat.net/blog/wp-content/uploads/2008/09/sed1line.txt
Итак, я обнаружил на самом деле неправильную строку в lvm.conf (отличающуюся от того, что я изначально заявил):
filter = [ "a/sdc5*/","a/loop2*/", "r/.*/" ]
Примечание: я считаю, что причиной ошибки загрузки был неправильный синтаксис в исходном lvm.conf. Я хотел: filter принимать sda5 и loop2 и отклонять все остальные. Я неправильно указывал: sdc5 и, возможно, пропустил пробел после запятой
Регулярное выражение sed, которое помогло заменить неправильный синтаксис фильтром 'принять все' в lvm.conf:
sed -i "s/filter \= \[ \"a\/sdc5\*\/\",\"a\/loop2\*\/\", \"r\/\.\*\/\" \]/filter = [ \"a\/.\*\/\" ]/" /etc/lvm/lvm.conf
Извлеченные уроки: + escape не требуется для пробелов, необходим для буквальной косой черты, звездочки и кавычек + Ubuntu 14.04 по умолчанию НЕ включает vi или tail, несмотря на то, что они оба перечислены как команды BusyBox в восходящем потоке, что-то не так с сборкой Ubuntu BusyBox по умолчанию. В будущем я буду проверять, что все мои системы включают ПО МИНИМУЮ vi и tail в сборках BusyBox! + sed поначалу сложно понять, но это действительно полезный и мощный инструмент
Шаги по просмотру статуса LVM, воссозданию LVM vg и lv и загрузке из BusyBox после sed и проверки:
(initramfs) lvm
lvm> pvdisplay
lvm> vgdisplay
lvm> lvdisplay
lvm> vgchange -a y
lvm> exit
(initramfs) exit
Источник: http://ubuntuforums.org/showthread.php?t=1898901
Затем Ubuntu продолжила нормальную загрузку с активным корневым lv и сразу перешла в систему. Потрясающие!
Согласно документы, в busybox 1.12.1 есть vi.
В любом случае, вот ваше регулярное выражение sed:
sed -i "s/filter\ \=\ \[\ \"a\/loop2\/\",\ \"r\/\.\*\/\"\ \]/filter = [ \"a\/.*\/\" ]/" /etc/lvm/lvm.conf