Что такое chroot? Это похоже на одновременную двойную загрузку?

Мне было предложено, что использование chroot может решить мою проблему создания приложения, которое должно выполняться на встроенном устройстве. Из этого описания я сделал вывод, что он каким-то образом похож на создание встроенной среды локально на моей машине, которую затем я могу использовать для разработки с моей машины разработки на рабочем столе. Это правильный способ взглянуть на функциональность или я полностью не понял?

Чтобы получить представление о том, как это работает, я прочитал этот https://wiki.ubuntu.com/DebootstrapChroot, который я буду попытайтесь сделать chroot для старой версии Ubuntu на моей машине. Однако, поскольку я полный новичок в Linux, я немного обеспокоен тем, что, поскольку я не совсем понимаю, что я делаю, так или иначе, я могу закончить с непригодной системой? Это что-то, что начинающий должен даже попробовать?

1
задан 12 July 2012 в 21:04

5 ответов

Я чувствую, что никто не дал полного технического объяснения, поэтому здесь идет.

Чтобы понять chroot, вам сначала нужно понять раскол между ядром (Linux в GNU / Linux) и пользовательским пространством (GNU в GNU / Linux или, возможно, что-то еще, например, busybox.)

Ядро управляет всем оборудованием вашего компьютера. Он также предоставляет API для доступа к файлам, сети и т. Д. И контролирует, какие программы работают. Все это создает абстракцию компьютера, который представлен через интерфейс прикладного программирования (API). Однако он ничего не делает на своем собственном, кроме, может быть, загрузки до черного экрана. Даже приглашение оболочки.

Пользовательское пространство - это все остальное. Все программное обеспечение, которое вы запускаете на своем компьютере. На самом деле ядро ​​запускает только одну программу пользовательского пространства, init, которая затем отвечает за запуск всего остального, например оболочки и среды рабочего стола. В пользовательском пространстве также есть библиотеки, которые обычно начинаются с libc, на которых строятся все остальные библиотеки.

Итак, имея в виду, концепция chroot проста. Он просто изменяет корневой каталог файловой системы unix на другой, только для любой команды, которую вы выбираете для запуска в этом контексте. Обычно это оболочка, в которой вы можете запускать другое программное обеспечение, так как ядро ​​запускает только одну команду напрямую. Этот новый контекст может иметь другой набор программ и библиотек пользователей. В одном и том же ядре работают оба набора программного обеспечения, поэтому обе системы могут использовать все аппаратные ресурсы, но (запрещая ошибки безопасности) вложенный chroot не может получить доступ к чему-либо из основной файловой системы. У него есть собственная версия / etc для конфигурации, это собственный / lib для библиотек, а также собственный / bin, / usr / bin для программ.

Вы должны знать, что аппаратные устройства являются общими. Таким образом, в отличие от виртуальной машины, если вы форматируете / dev / sda изнутри chroot, вы отформатируете свой настоящий жесткий диск. Это связано с тем, что узлы устройства в / dev являются прямым интерфейсом ядра, поэтому они означают одно и то же внутри и вне chroot.

Еще одна вещь: можно предоставить chroot доступ к внешней файловой системе с все остальное Если вы используете инструмент построения chroot, возможно, что он «помогает» монтирует / home из основной системы внутри chroot. Это не копия, это одна и та же файловая система, и в этом случае любые изменения, которые вы делаете внутри chroot, будут выполняться на оригинале. Поэтому я рекомендую вам вручную создавать chroots до тех пор, пока вам не будет удобно, как они работают.

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

5
ответ дан 25 May 2018 в 08:44

Позвольте мне объяснить chroot с точки зрения Windows. В Windows «корень» загрузочного раздела называется «C: \». В Linux он называется «/». choort (временно) позволяет вам сделать другую папку / раздел / устройство корневым разделом. Если у Windows была команда choot, она могла бы работать следующим образом.

Представьте, что у вас есть компьютер с двумя разделами или дисками с двумя версиями (или копиями) установленных Windows. Позволяет называть их WinA и WinB. Когда вы загружаете WinA, его корень становится C: \, а WinB может отображаться в D :. Когда вы загружаете WinB, C: \ относится к разделу, где установлена ​​WinB, а D: \ - это где WinA. Предположим, вы хотите внести некоторые изменения в WinA и WinB, запустив программу z. Когда вы запускаете z, он выполняет все изменения, которые вы хотите использовать в системе с корнем C :. В мире Windows вам нужно загрузить WinA run z, а затем загрузить WinB и запустить z. chroot позволяет сделать D: \ в C: \ без перезагрузки. Таким образом, вы можете загружать Winro Run Chroot, чтобы сделать D: новый C: и запустить программу z, чтобы изменения были внесены в WinB, который находится в D: \ вместо WinA, который находится в исходном C:.

Теперь позвольте мне привести пример того, как я использовал chroot. Как только мой Ubuntu стал не загружаемым. Оказалось, что нужно было переустановить решетку. Это легко, если я могу загрузить Ubuntu и запустить команду, которая устанавливает grub. Но мне нужно было сделать это с USB. Поэтому я загрузил Ubuntu с USB-накопителя. Если я выпустил команду для установки grub, я бы установил grub на USB. Поэтому мне нужно было установить partion на жестком диске, где установлен Ubuntu со сломанной решеткой, и использовать chroot, чтобы указать на этот смонтированный раздел. Затем я переустановил grub и grub, установленный на жестком диске, где он должен быть.

2
ответ дан 25 May 2018 в 08:44

Chroot позволяет запускать команду или оболочку из другого корневого каталога. Если это было предложено вам из-за встроенного устройства, это означает, что вы будете запускать оболочку из корневого каталога этого устройства.

1
ответ дан 25 May 2018 в 08:44
  • 1
    запуск оболочки на моем хост-компьютере с встроенного устройства? – mathematician1975 12 July 2012 в 18:43
  • 2
    Я уверен, что он означает, что вы можете запустить chroot в корневом каталоге встроенного устройства. Либо изображение для устройства, либо через USB или сетевую ссылку. Это можно сделать на живой системе, хотя я бы не рекомендовал ее, если ее можно избежать. – Ken Sharp 9 June 2014 в 02:25

Не действительно, нет.

Загрузка ОС связана с загрузкой ядра, которое управляет оборудованием, а затем запускает ряд других программ. chroot запускает программу (как правило, оболочку, из которой вы можете запускать другие программы) под вашим текущим ядром, только ядро ​​лежит в программе и делает вид, что корневой каталог - это другой каталог, чем тот, который он действительно использует в качестве корень. Следовательно, имя команды, потому что оно меняет корневой каталог.

В вашем случае debootstrap устанавливает дерево каталогов, которое подходит для использования в качестве корневого каталога. Вы можете загрузить ядро ​​и сказать, что он использует этот каталог в качестве корня вместо обычного корневого fs, и вы будете загружать эту систему. Используя chroot, вы можете запускать программы так, как если бы они запускались под ядром, которое загружалось с использованием этого каталога в качестве его корня, но при этом не было необходимости делать это.

1
ответ дан 25 May 2018 в 08:44
  • 1
    Таким образом, это похоже на настраиваемую среду, предназначенную для «имитации». другой? Вы создаете эту среду и все программное обеспечение работает так, как если бы оно работало в этой новой среде? Или это упрощенное (или неправильное) – mathematician1975 12 July 2012 в 20:08
  • 2
    @ mathematician1975, вы можете посмотреть на комбинацию chroot + debootstrap таким образом. – psusi 13 July 2012 в 04:21

Когда вы загружаетесь из другой системы, например Live CD, вы можете войти в файловую систему (linux) с помощью chroot.

При этом вы можете, например, восстановить GRUB (в случае ошибок). Это также очень полезно, если вы не можете загружать и загружать важные файлы из определенного раздела.

0
ответ дан 25 May 2018 в 08:44
  • 1
    Вы не используете chroot для любого из этого. Вы просто монтируете файловую систему. – Ken Sharp 9 June 2014 в 02:26

Другие вопросы по тегам:

Похожие вопросы: