Журнал LinuxFormat - перейти на главную

LXF156:Dracut?

Материал из Linuxformat
Перейти к: навигация, поиск


Dracut? Что за штука…

В И что же это та­кое?

О Dracut (http://dracut.wiki.kernel.org) – это ин­ст­ру­мент для сбор­ки initramfs, не за­ви­ся­щий от ди­ст­ри­бу­ти­ва Linux.

В Увы, по­сле ва­ше­го от­ве­та я понимаю еще мень­ше. Что вы имее­те в ви­ду?

О Что Dracut – это но­вый ин­ст­ру­мент для соз­дания спе­ци­аль­ных про­грамм и фай­лов за­груз­ки, со­вмес­ти­мый со все­ми ди­ст­ри­бу­ти­ва­ми GNU/Linux.

В Ага, по крайней мере ста­ло яс­но, о чем речь. А что это за initramfs?

О По­зволь­те мне уточнить кое-что, пре­ж­де чем от­ве­чать. Вы ведь помните, что Linux – это толь­ко яд­ро, а функ­ции ядра ог­раниче­ны, да?

В Э-ээ... Ну да, конеч­но! Яд­ро Linux...

О ...это ба­зо­вое ПО, от­ве­чаю­щее толь­ко за вы­полнение са­мых основ­ных, низ­ко­уровневых дей­ст­вий внут­ри ком­пь­ю­те­ра, от за­пуска сис­тем­ных драй­ве­ров до дис­пет­че­ри­за­ции про­цес­сов.

В Вот, те­перь по­нят­но... Так как же он ра­бо­та­ет?

О За­пуск яд­ра Linux на­чи­на­ет­ся с на­хо­ж­дения и мон­ти­ро­вания фай­ло­вой сис­те­мы, после чего оп­ре­де­ляется пер­вая за­пускае­мая про­грам­ма. Для это­го предусмотрена неболь­шая функ­ция ‘init’, которая от­ве­чает за по­ря­док за­груз­ки всех по­сле­дую­щих функций; в ее обязанности входит так­же их на­хо­ж­дение (по­то­му что про­грам­мы, в прин­ци­пе, мо­гут быть разбросаны по раз­ным дис­кам, или вообще рас­по­ла­гать­ся на дру­гом сер­вере).

В Но ведь это не та­кая уж слож­ная за­да­ча. Не мо­жет раз­ве яд­ро вы­пол­нять ее са­мо­стоя­тель­но?

О В тео­рии, мо­жет. Но на са­мом де­ле, за­да­ча-то не из про­стых (по крайней ме­ре, для яд­ра), ес­ли брать в рас­чет все воз­мож­ные ва­ри­ан­ты. Се­го­дня ведь Linux ра­бо­та­ет прак­ти­че­­ски на всем – от стан­дарт­ных ПК до мо­биль­ных те­ле­фо­нов и ав­то­мо­биль­ных муль­ти­ме­диа-сис­тем. Кро­ме мик­ро­про­цес­со­ра, эта ис­ход­ная фай­ло­вая сис­те­ма мо­жет на­хо­дить­ся на ста­рых до­б­рых же­ст­ких дис­ках, USB-брел­ках, се­те­вых драй­ве­рах, flash-чи­пах или RAID-мас­си­вах. Да да­же на двух оди­на­ко­вых ма­ши­нах фай­ло­вые сис­те­мы мо­гут иметь со­вер­шен­но раз­ную кон­фи­гу­ра­цию.

В А что зна­чит «со­вер­шен­но» раз­ные? По­ми­мо ти­па, то есть ext3 или там ext4, чем еще они мо­гут от­ли­чать­ся?

О Ну, для на­ча­ла, они мо­гут быть сжа­ты­ми или за­шиф­ро­ван­ны­ми, ес­ли го­во­рить о са­мых час­тых слу­ча­ях. А зна­чит, яд­ро долж­но вклю­чать не толь­ко необ­хо­ди­мые про­грамм­ные ин­ст­ру­мен­ты досту­па к ним, но, во вто­ром слу­чае, еще и па­роль. На­конец, в на­шу эру но­ут­бу­ков, Linux так­же дол­жен уметь ра­бо­тать в спя­щем ре­жи­ме – а имен­но, воз­вра­щать­ся в ис­ход­ное со­стояние по­сле бло­ки­ров­ки.

В ОК, по­нят­но: ва­ри­ан­тов мо­жет быть мно­го.

О Имен­но. По крайней ме­ре – столь­ко, что учесть их все ис­клю­чи­тель­но в па­ра­мет­рах команд­ной стро­ки яд­ра бу­дет очень труд­но. Кро­ме то­го, яд­ро ведь та­кая хит­рая шту­ка, что его прак­ти­че­­ски невоз­мож­но за­ста­вить вы­пол­нять все необ­хо­ди­мые дей­ст­вия для на­хо­ж­дения корнево­го эле­мен­та. Имен­но это име­ют в ви­ду неко­то­рые раз­ра­бот­чи­ки, го­во­ря, что яд­ро соз­да­но, что­бы принимать ко­ман­ды и за­про­сы, а не ре­шения.

В И как с этим справ­ля­ет­ся initramfs? То есть, ЧТО во­об­ще та­кое initramfs?

О Ис­хо­дя из са­мо­го на­звания, это ма­лень­кая «стар­то­вая фай­ло­вая сис­те­ма», впер­вые поя­вив­шая­ся в вер­сии яд­ра Linux 2.6, за­гру­жае­мая в ОЗУ и там же за­пускаю­щая­ся. За­да­ча initramfs – хранить, в пра­виль­ной ло­ка­ли­за­ции и при­ем­ле­мой для яд­ра кон­фи­гу­ра­ции, нуж­ную вер­сию инициа­ли­зи­рую­щей про­грам­мы, а так­же драй­ве­ра и ин­ст­ру­мен­ты, необ­хо­ди­мые для ее за­груз­ки.

Как толь­ко нуж­ное при­ло­жение най­де­но и за­пу­ще­но, ника­ких до­полнитель­ных дей­ст­вий яд­ро не про­из­во­дит. И имен­но эта инициа­ли­зи­рую­щая про­грам­ма, внут­ри initramfs, най­дет и дей­ст­ви­тель­ную фай­ло­вую сис­те­му – ту, на ко­то­рой рас­по­ло­жен ваш ди­ст­ри­бу­тив GNU/Linux – и за­пустит ее.

В Но раз­ве фай­ло­вая сис­те­ма – не неиз­ме­няе­мая струк­ту­ра дан­ных? Как она мо­жет быть в ОЗУ?

О Ну, во­об­ще-то, фай­ло­вая сис­те­ма – это обыч­ный на­бор байт, ко­то­рый мож­но ско­пи­ро­вать ку­да угод­но – она струк­ту­ри­ро­ва­на та­ким об­ра­зом, что­бы хранить и обес­пе­чи­вать бы­ст­рый доступ к пап­кам и фай­лам.

Од­на­ко что­бы поль­зо­вать­ся ею да­же из ОЗУ, initramfs мож­но по­стро­ить как ре­аль­ный диск, ко­то­рый – опустим техниче­­ские под­роб­но­сти – про­сто не ну­ж­да­ет­ся в драй­ве­ре.

В И вы упо­мя­ну­ли, что initramfs ис­поль­зо­ва­лась и до по­яв­ления Dracut, да?

О Вер­но. При­чем так ак­тив­но, что за эти го­ды ка­ж­дый ди­ст­ри­бу­тив GNU/Linux об­за­вел­ся соб­ст­вен­ным ин­ст­ру­мен­та­ри­ем для генера­ции та­ких фай­ло­вых сис­тем.

В Вернем­ся к Dracut: что он до­ба­вил в об­щую кар­ти­ну?

О Dracut – од­но­вре­мен­но и ин­ст­ру­мен­та­рий, и но­вый ме­тод, осно­ван­ный на со­бы­ти­ях Udev, для соз­дания initramfs об­ще­го на­зна­чения. Он был соз­дан в 2009 го­ду, да­бы пре­одо­леть ог­раничения ста­рых сис­тем, ори­ен­ти­ро­ван­ных на кон­крет­ный ди­ст­ри­бу­тив.

В Стоп! Опять вы швы­ряе­тесь муд­ре­ны­ми сло­ва­ми. В смыс­ле, что это — Udev?

О Udev – это де­мон, ко­то­рый соз­да­ет, име­ну­ет и уда­ля­ет фай­лы уст­ройств – то есть про­грамм­ный ин­тер­фейс к ап­па­рат­ным эле­мен­там для всех сис­тем GNU/Linux.

В А за­чем для это­го де­мон?

О Глав­ным об­ра­зом, для то­го, что­бы иметь универ­саль­ный спо­соб по­лу­чения со­хра­няе­мых имен уст­ройств, да­же для съем­ных дис­ков. Дей­ст­вия Udev со­об­ща­ют­ся всем про­грам­мам, ко­то­рых это ка­са­ет­ся.

В Спа­си­бо. Так за­чем был за­пу­щен Dracut? В чем его цель?

О Для конеч­ных поль­зо­ва­те­лей глав­ным ре­зуль­та­том внедрения Dracut бу­дет со­кра­щение вре­мени за­груз­ки. Он при­зван об­лег­чить по­строение и ис­поль­зо­вание дей­ст­вую­щих корневых фай­ло­вых сис­тем; а об initramfs, со все­ми ее недостат­ка­ми, как мож­но ско­рее за­быть.

В А раз­ра­бот­чи­ки и под­держ­ка? Что вы­иг­ра­ют они?

О Ес­ли в двух сло­вах, бу­дет мень­ше ко­да для за­пуска и от­лад­ки и боль­ше эф­фек­тив­ных спо­со­бов это­го достичь. По­ка в каждрм ди­ст­ри­бу­ти­ве соб­ст­вен­ный ин­ст­ру­мен­та­рий для соз­дания initramfs, по­тен­ци­аль­ных рис­ков очень мно­го. А в осно­ву Dracut по­ло­же­на идея о том, что­бы вы­теснить из ди­ст­ри­бу­ти­вов по­ко­ление initramfs, тем са­мым уп­ро­стив ра­бо­ту тех, кто их об­слу­жи­ва­ет.

В И как же Dracut это уда­ст­ся?

О За счет уп­ро­щен­ной универ­саль­ной инициа­ли­зи­рую­щей про­грам­мы, ко­то­рая бу­дет ис­поль­зо­вать еди­ный udev-ин­ст­ру­мент для всех ме­то­дов уста­нов­ки и па­ра­мет­ров за­груз­ки, в со­ста­ве бо­лее ти­пич­но­го и обоб­щен­но­го initramfs.

Еще од­на при­чи­на, по ко­то­рой Dracut дол­жен об­лег­чить жизнь раз­ра­бот­чи­ков, яв­ля­ет­ся на­ли­чие в нем ди­аг­но­сти­че­­ской обо­лоч­ки. Он так­же вклю­ча­ет и воз­мож­но­сти для соз­дания «ло­ву­шек [hooks]» – то есть спо­со­бов за­пуска про­из­воль­ных команд.

В Но как эта универ­саль­ная инициа­ли­зи­рую­щая про­грам­ма спра­вит­ся со все­ми ва­ри­ан­та­ми?

О Бла­го­да­ря доступ­но­сти udev в но­вой initramfs, Dracut ухитряется пе­ре­ве­рнуть все преж­ние про­це­ду­ры с ног на го­ло­ву. Вме­сто то­го, что­бы пич­кать initramfs в ка­ж­дом ди­ст­ри­бу­ти­ве свои­ми соб­ст­вен­ны­ми премуд­ро­стя­ми для об­на­ру­же­ния обо­ру­до­вания, про­грам­ма инициа­ли­за­ции в Dracut за­став­ля­ет udev соз­да­вать фай­лы уст­ройств.

В Имее­те в ви­ду, что это про­ис­хо­дит в про­цес­се обыч­ных дей­ст­вий, когда я встав­ляю флэш­ку в ком­пь­ю­тер?

О Имен­но так.

В А что по­том?

О

За­груз­ка прак­ти­че­­ски за­вер­ше­на. Как толь­ко файл уст­рой­ст­ва с дей­ст­вую­щей корневой фай­ло­вой сис­те­мой соз­дан, яд­ро «пе­ре­ска­ки­вает» на него, а initramfs за­пуска­ет инициа­ли­зи­рую­щую про­грам­му.

В А мо­жет Dracut соз­да­вать initramfs спе­ци­аль­но под мою сис­те­му?

О Мо­жет. Лег­ко, на­при­мер, умень­шить об­раз, до­ба­вив в скрипт Dracut па­ра­метр -H. Тогда на ва­шем же­ст­ком дис­ке останет­ся initramfs, ко­то­рая не бу­дет за­гру­жать­ся на дру­гом ком­пь­ю­те­ре, но час­то ли это про­бле­ма?

В А ес­ли я за­хо­чу вме­сто это­го уско­рить за­груз­ку?

О Тогда на­строй­те со­от­вет­ст­вую­щие па­ра­мет­ры команд­ной стро­ки в Dracut, оп­ре­де­лив па­ра­мет­ры ва­шей сис­те­мы и па­ра­мет­ры за­груз­ки.

Ес­ли вы это сде­лае­те, Dracut под­гонит под эту ин­фор­ма­цию со­от­вет­ст­вую­щие на­строй­ки яд­ра и дру­гие ин­ди­ви­ду­аль­ные па­ра­мет­ры, что­бы соз­дать initramfs, из­на­чаль­но знаю­щую, где на­хо­дится фай­ло­вая сис­те­ма.

Персональные инструменты
купить
подписаться
Яндекс.Метрика