Bozuk bir Linux kurulumunu kurtarmak için chroot hazırlamanın yolu nedir?


52

Bu soru, sıkça sorulan sorularla ilgilidir. Prosedür sıkça bahsedilir veya şirket dışına bağlanır, ancak çoğu zaman açıkça ve doğru bir şekilde ifade edilmez. Yararlı bilgileri tek bir yerde yoğunlaştırmayı hedefleyen bu soru, bu prosedür için açık ve doğru bir referans sağlamayı amaçlamaktadır.


Bir kurtarma prosedürü için chroot ortamı hazırlamak için uygun adımlar nelerdir ?

Pek çok durumda , bozuk bir Linux kurulumunu onarmak en iyi kurulum içinden yapılabilir. Ancak sistem önyükleme yapmazsa, onu içinden nasıl düzeltirsiniz?

Alternatif bir sisteme önyüklemeyi başardığınızı varsayalım. Bir kez orada, onu düzeltmek için bozuk kurulumunuza erişmeniz gerekir. Pek çok kurtarma How-Tos , programları bozuk bir yüklemeye başlatmışsınız gibi çalıştırmak için chroot kullanmanızı önerir .

  • Temel prosedür nedir?
  • İzlenecek en iyi yöntemler var mı?
  • Temel hazırlık adımlarını belirli bir kurtarma görevine uyarlamak için hangi değişkenlerin dikkate alınması gerekir?

Bu, Topluluk Wiki'si olduğu için, bu soruyu da geliştirmek üzere düzenlemek için çekinmeyin.

Yanıtlar:


72

İşte bazı kaynaklar:

"Kök değiştirme" veya "chrooting" Örneğin, anlaşılması için, dosya sisteminin parçası üzerinde yakınlaştırma için kullanılan bir yöntemdir /pathde eskiden erişilebilir ne sevk edecektir /mnt/path. "Chroot" ifadesindeki "root" /, root kullanıcısına değil , root dosya sistemine atıfta bulunur . (Genellikle, chroot yapabilmek için root kullanıcı haklarına ihtiyacınız olacaktır.)

Hazırlık

  • Bu kılavuzdaki tüm adımların root kullanıcısı olarak gerçekleştirilmesi gerekecektir.

  • Sabit diskinizin / dev / sda1 konumunda olduğunu ve dosya tipinin ext3 olduğunu varsayalım. Diskinizin yerini ve dosya türünü bilmiyorsanız, çıktısını okuyun fdisk -l.

  • Başladığınız sistemin mimarilerinin (örneğin bir 32bit LiveCD) ve girmek istediğiniz sistemin (örneğin, sabit sürücünüzde 32 bitlik bir kurulumdur) eşleştiğinden emin olun. Kullanarak başlattığınız mimariyi belirleyebilirsiniz uname -m.

  • İhtiyacınız olan çekirdek modüllerinin yüklendiğinden emin olun.

  • Gerekirse ağınızı kurun (örneğin, güncellenmiş paketleri kurmak için).

  • Gerekirse takas bölümünüzü sıfırlayın (örn swapon /dev/sda3.).

Chroot gerçekleştiriliyor

cd /
mount -t ext3 /dev/sda1 /mnt
mount -t proc proc /mnt/proc
mount -t sysfs sys /mnt/sys
mount -o bind /dev /mnt/dev

Dizininiz /bootsizinkinden farklı bir bölümdeyse /ve üzerindeki dosyaları değiştirmek istiyorsanız (örneğin, GRUB ile çalışıyorsanız, çekirdek yükseltme gerçekleştiriyorsanız, vb.), O bölümü de eklemeniz gerekir. / Dev / sda2 konumunda ve dosya türü ext2 ise, şunları yapın:

mount -t ext2 /dev/sda2 /mnt/boot

Benzer şekilde sizin dosya sistemi (herhangi diğer bölümleri için /var, /usrsize erişmesi gereken ayrı bölümlere ancak üzerine) o, İkamet. Genellikle bir şeyi düzeltmek için chroot yaparken, / home erişimine ihtiyacınız olmayacak, onunla uğraşmanıza gerek kalmayacak.

(Ayrıca, chrooted olduktan sonra dosya sistemlerini bağlamak da mümkündür, ancak bunu önceden yapmak daha zekicedir. Bunun nedeni, daha sonra yaptığınızda, dış / çekirdek ortamının takılı dosya sistemlerini bilmemesidir, bu yüzden unutursanız chroot'tan çıkmadan önce onları ayıklayın, sistem kapandığında da onları saymayı bilemez. Bu, bu dosya sistemlerine zarar verebilir.)

Eğer kurulum ağınızı ettik ve chroot sistemde kullanmak istiyorsanız, üzerinden kopyalama /etc/resolv.confEğer çözmek alan adlarının mümkün olacak, böylece:

cp -L /etc/resolv.conf /mnt/etc/resolv.conf

Artık bağlı dosya sistemine geçmeye hazırsınız:

chroot /mnt /bin/bash

(Bu bir hata verirse chroot: cannot run command '/bin/bash': Exec format error, bu genellikle bir mimariyle (örneğin x86_32) önyükleme yaptığınızı ve diğerine chroot yapmaya çalıştığınızı gösterir (örn. X86_64). Çözüm, istediğiniz sistemle aynı mimariye sahip bir LiveCD kullanmaktır. içine chroot.)

Bu noktada, hala başlattığınız çekirdeği çalıştırıyorsunuz, ancak tüm yollar eskisi gibi /patholacak /mnt/path.

GRUB ile herhangi bir şey yapacaksanız, /etc/mtabdosyanızın güncel olduğundan emin olmanız gerekir :

grep -v rootfs /proc/mounts > /etc/mtab

Bu noktada aşağıdakiler de faydalı olabilir:

source /etc/profile
export PS1="(chroot) $PS1"  # add a reminder to your prompt

Kirli işini yap

Bu noktada, yapmanız gereken her türlü sorunu gidermeyi yapabilirsiniz:

  • diskinizdeki MBR'ye GRUB reçine
  • unutulmuş bir şifreyi sıfırla
  • bir çekirdek yükseltme gerçekleştirme (veya düşürme)
  • initramdisk'inizi yeniden oluşturun
  • / etc / fstab dosyasını düzeltin
  • Paket yöneticinizi kullanarak paketleri tekrar kurun
  • her neyse

Temizlemek

İşiniz bittiğinde, çalışan tüm programların durduğundan emin olun. Sonra chroot'tan çıkın:

exit

Şimdi monte ettiğiniz tüm bölümleri çıkarın:

umount /mnt/boot # if you mounted this or any other separate partitions
umount /mnt/{proc,sys,dev}

Sonunda sabit sürücünüzü çıkarmaya çalışın:

umount /mnt

/ Mnt (veya başka bir bölümün) meşgul olduğunu söyleyen bir hata alırsanız, bu iki şeyden biri anlamına gelebilir:

  • Chroot'un içinde çalışan bir program kaldı.

  • Veya daha sık: Bu montajda hala bir montaj noktası var. Örneğin, / mnt / mnt'yi çıkarmaya çalışırken / mnt / usr hala monte edilmiştir.

İkinci durumda, önce rahatsız edici montaj noktasının bağlantısını kesin. Tüm geçerli montaj noktalarını hatırlatmak için, mountparametresiz çalıştırın .

En sonunda:

reboot

10
Hazırlık olarak, chroot.shkullandığım her sistemin kökünde adı geçen ve içeriği aşağı yukarı aynı olan bir senaryo bırakma eğilimindeyim . Bu sisteme bir LiveCD veya başka bir şeyden chroot yapmam gerektiğinde, sadece root dosya sistemini kurdum ve chroot betiğini çalıştırdım. Doğru komutlar için çılgınca bir googling yok.
Ryan Thompson,

4
Siz bayım domuz pastırmamı korudum - mükemmel yazıları Bu gibi durumlarda, SO'nun +1000 düğmesi olmasını diliyorum.
zelanix

1
Bunu kullanın: SHELL=/bin/bash chroot /mntEğer livecd'in varsayılan SHELL'i chrootlu bir ortamda değilse (örneğin, Vres !.
Alois Mahdal,

/runBu günlerde de montaj yapman gerektiğini öğrendim mount --bind /run /mnt/run.
cengique
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.