Преди няколко седмици написах статия за това как да стартирам няколко сесии X без виртуализация, което показва как можете да работите едновременно с няколко настолни компютъра на същия компютър и да ги превключвате с натискане на бутон. Признавам, че това беше донякъде топло за истинското шоу - как да се изпълняват няколко Linux дистрибуции едновременно, без да се налага да се справят с недостатъците на софтуера за виртуализация.

Днес ще използваме chroot за обработка на определени части от вашата Linux файлова система като (почти) напълно изолирани системи. Това може да ви позволи да правите всякакви интересни неща, като например да пуснете пълна система от Gentoo от вашата Ubuntu система с малко или никаква загуба на производителност.

Как работи

Преди да започнем, би било добра идея да преминем точно това, което правим и как всичко работи. Когато стартирате компютъра си с Linux, преминавате през поредица от стъпки за зареждане. GRUB, вашият буутлоудървач, зарежда ядрото, което е посочено в конфигурационния файл на GRUB, го свързва с коренния ви дял и изпълнява скриптовете за запомняне, съхранени там. Оттогава системата ви се изпълнява от този корен дял.

Ще използваме хост Linux система (ще го направя от Debian, но стъпките трябва да са почти идентични, независимо от разпространението), която минава през този нормален процес на зареждане, но след това обработва определена част от вашата файлова система ( като / mnt / гост) като собствена изолирана инсталация. Тази система за гости няма да премине през процеса на зареждане, няма да зареди ядрото и няма да стартира скриптове за инициали. Ще кажете на хоста ви да се "свърже с тази директория, сякаш е новия корен дял". Диаграмата по-долу трябва да помогне да покажете какво имам предвид.

Това е приблизително как файловете ще бъдат разположени на вашата система, просто седи като нормални файлове на нормален дял, третират се същите като всички други файлове, докато не използваме "chroot", за да ги превърнем в нещо специално.

Но след като използваме chroot (CHANGE ROOT) и го насочим към / mnt / guest (или където и да сложим файловете в следващата стъпка), тази директория вече е собствена коренна файлова система. Тя става напълно забравена за приемащата система. Всички програми и команди, които се изпълняват от този нов корен, се изпълняват въз основа на софтуера вътре в този нов клон.

Например, ако сте в / mnt / guest и въведете "ls", той чете командата "ls" от вътрешната среда, която не е наясно с командата "ls" на хост системата. Ако въведете "Firefox", той стартира Firefox от вътрешната страна на новия корен, независимо дали сте инсталирали Firefox на хоста.

Първи и използване на госта Distro

За да направите това, просто се нуждаете от базовата файлова система на Linux дистрибуция, каквото и да е дистро. Debian има чудесно средство само за тази цел, наречена debbootstrap, която изтегля базовите файлове и ги поставя там, където пожелаете. За да държим нещата интересни и да демонстрираме какво може да направи хромото, ще използваме Gentoo файлова система за нашите гости. За да поддържам нещата прости и директни, ще включа изтеглянето на тарбал като една от стъпките, които ще направим на командния ред.

Тези стъпки ще изтеглят всички основни файлове за Gentoo система, ще ги извлекат в нашата целева директория (ще използвам / mnt / guest, но ще можете да използвате всичко, което ви харесва) и след това да хротирате в тази директория, така че да се третира като нова корен (/) директория. Възможно е да имате нужда от root (sudo) разрешения за някои от следните команди.

 mkdir / mnt / гост cd / mnt / гости wget http://distfiles.gentoo.org/releases/x86/2008.0/stages/stage3-x86-2008.0.tar.bz2 tar -jxvf stage3-x86-2008.0.tar.bz2 chroot / mnt / гост 

Тези команди изпълняват следните стъпки, по реда на ред:

  1. Създайте пространство за нашата система за гости
  2. Преместете се в това пространство
  3. Изтеглете системните файлове на Gentoo
  4. Извадете ги
  5. Отнасяйте се до това ново пространство като директорията (/)

Следващата екранна снимка трябва да покаже, че след като сме използвали chroot, за да свържем новата ни директория като корен, тя вече е изолирана от предишните клонове в дървото на файловата система.

За да обясним екранната снимка, започваме с нормален команден ред на хост системата. Използвам pwd, за да покажа текущата си директория, където всички файлове на Gentoo се намират като обикновени стари файлове без особен смисъл. След това използвам chroot, за да обработя тази директория като новия корен и вече можете да видите визуално, че моят подкана е променен, защото командният ред вече изважда цялата информация (включително как да нарисувате подкана) от коренната среда на Gentoo. ВСИЧКИ команди и действия, които вземам, докато се зареждам, зависят от командите, съществуващи в това ново дърво на файла. Когато пиша отново pwd, той вече не казва / mnt / guest, защото доколкото знае тази черупка, нищо не съществува освен това, което вижда вътре в това дърво.

Неща, които трябва да имате предвид

Както споменах по-горе, това не е 100% изолирано от системата домакин. Хротичната среда никога не е била "заредена", така че никога не е зареждала своето собствено ядро ​​и никога не е имало собствени скриптове. В нашия пример имаме Gentoo, който работи на ядрото, което хостът (в моя случай Debian) е стартирал.

Този метод със сигурност не е заместител на виртуализацията и не може да направи всичко, което VM може да направи. Системата за гости никога не всъщност "стартира" или изпълнява скриптове за начално съдържание и е възможно вашата операционна система за гости да изисква някои функции, които ядрото на хост ви не предлага.

За какво?

Във времето, когато споменах тази техника на хората в миналото, те често са казвали нещо подобно на "Това е страхотно, но за какво ще го използвате?". Лично аз открих няколко приложения за chroot :

  • Тествайте разработването на софтуер в девствена среда
  • Изпълнявайте софтуера, предназначен за друго разпространение
  • Изпълнявайте софтуер, който изисква по-стара или по-нова версия на текущото ви дистрибуция
  • Достъп до инсталация на Linux на различен дял, без да се налага да рестартирате
  • Стартирайте Live CD и използвайте chroot, за да поправите инсталацията си или GRUB
  • Достъп до устройство, в което сте забравили потребителя / паролата
  • Изпълнявайте 32-битово приложение в 64-битова среда

И съм сигурен, че има много повече, от които никога не съм. Използвали ли сте някога chroot, за да стартирате няколко дистрибуции? Какво ще кажете за ремонт на Linux система от Live CD? Кажете ни в коментарите.