Chroot - Live Rendszer (LiveCD/DVD/USB Stick)

kimarite képe

Előszó

A chroot futtatja a parancsot vagy az interaktív shell-t a paraméterben megadott speciális gyökérkönyvtár értékkel. Haszna az, hogy miután "chroot"-oltunk egy speciálisan felkészített mappába, onnantól kezdve az aktuális héjon belül, a gyökérkönyvtárnak a rendszer az adott mappát, és nem a valódit tekinti. Ezzel egy kisebb rendszert hozhatunk létre a nagyobbik rendszeren belül. Gyakran jelen van Linux telepítőkészletekben, és ún. LiveCD-k használatakor.
Forrás: http://wiki.hup.hu/index.php/Chroot

Arról van szó tehát, hogy Live (CD-ről indított, a memóriában futó) rendszerről 'chroot'-olsz a telepített rendszer gyökér partíciójára. A művelet előnyét a fenti leírásból is sejtheted, de pontosítom a fogalmat;
a telepített rendszer indításakor használt héjba lépsz (futtatod 'kívülről'),

chroot = change root (vonatkozik --> parancs illetőleg shell; folyamat és annak gyerekfolyamatai)

ezáltal  a telepített rendszert úgy tudod használni, mintha azt indítottad volna el. Mount-olod a telepített rendszered gyökér, azaz rendszer könyvtárát, a futásához feltétlen szükséges fizikai eszközöket és interaktív fájlrendszereket (utóbbiak általában speciális célú ál-fájlrendszerek [pseudo-filesystems]), a hálózatot, stb.. A chroot használata egyszerű, előnyös és mindössze egy LiveCD kell hozzá. LiveCD-ről használva rendszer javításhoz, frissítéshez vagy hasonló tevékenységekhez használhatod.
Fontos tudni, hogy az architektúráknak általában egyeznie kell, tehát a 32 bit-es rendszert 32 bit-es, a 64 bit-es rendszert 64 bit-es LiveCD-ről javíts, ellenkező esetben előfordulhat, hogy a kísérleted egy hibaüzenettel meghiúsul.
Vannak más előnyei, lehet másra is használni, a 'chroot' használata nem merül ki a LiveCD-ről való futtatással, ez csak egy kisebb részlete.
A telepítő képfájlokról (ISO) az kell tudni, hogy nem mindegyik LiveCD, de a legtöbb mégis az. Létezik olyan telepítő képfájl amely kizárólag telepítőként használható, ám LiveCD-ként nem működik. Az ismertebb linux kiadások (disztribúciók) mindegyikének van azonban elérhető LiveCD képfájlja, keresd és töltsd le tehát azt. A nevében sokszor megtalálod a 'live' szót.
Azt mondják, hogy a disztribúciókat se keverd. Én viszont javítottam már Crunchbang Linux LiveCD-velLinux Mintet, Ubuntu-t.
Ez a leírás Debian-alapú rendszekre készült. Más, például RPM csomagokat használó rendszerek esetén a 'chroot' módszere, nem sokban, de kicsit más lehet.

Chroot

Live rendszert indítva a linux-szod gyökér partíciójába 'chroot'-olsz. Ehhez tudnod kell, melyik partíció ez: '/'
A linux
-- a lemezeket (HDD, SSD) sda, sdb, sdc, sdd ésatöbbi 'ABC' felsorolással jelzi, melynél az 'sda' az első lemezt jelenti
-- a partíciókat az sdx után látható számozással jelzi, így például az sda1 az első partíció (itt az 'x' most az 'a') ... az első lemezen
Nem bonyolult. Ha egyetlen lemezt használsz, akkor csak az 'sda'-val fogsz találkozni.

A telepített rendszered gyökere a boot zászlóval ellátott ('boot flag').
Mutatom, hogy néz ki, hogyan ismered fel
(az én rendszerem az 'sda'-n található, kukucs)

-- ha kiadod a

sudo fdisk -l

parancsot akkor így.

sudo fdisk -l
[sudo] password for cave:

Disk /dev/sda: 81 GB, 81956689920 bytes
255 heads, 63 sectors/track, 9964 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1               1         274     2200873   82  Linux swap
/dev/sda3            2890        9965    56829937    5  Extended
/dev/sda5   *        2890        5807    23430802   83  Linux # a csillag jelzi
/dev/sda6            5807        9965    33399135   83  Linux

-- ha kiadod a

sudo parted -l

parancsot, akkor így.

sudo parted -l
[sudo] password for cave:
Model: ATA Maxtor 6Y080L0 (scsi)
Disk /dev/sda: 82,0GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type      File system     Flags
 1      32,3kB  2254MB  2254MB  primary   linux-swap(v1)
 3      23,8GB  82,0GB  58,2GB  extended
 5      23,8GB  47,8GB  24,0GB  logical   ext4            boot # a 'boot' jelzi
 6      47,8GB  82,0GB  34,2GB  logical   ext4

No látod is, hogy nálam az 'sda5' partíción található a rendszerem gyökere.

Ránézhetsz esetleg a

sudo blkid

vagy a

mount | column -t

parancsok információra is.

-- ha meglett a root partíció (!példámban: /dev/sda5), azt behelyettesíted az alábbi parancsba (mount),
(az EXT2/3/4 fájlrendszerekre jó módszer)

sudo mount /dev/sdxY /mnt

ahol -az előbb megbeszéltük- az 'x' a lemez -Hard/Solid State Disk- sorszáma (első vagy második), és az 'Y' a partíció száma.
De azt kell tudnod, hogy az újabb LiveCD-k már olyan 'intelligensek', hogy már eleve csatolják a telepített rendszer partícóit, és naná, hogy a 'media' könyvtár alá. Ezt ellenőrizd, és akkor a 'mount'-ot, a csatolást már megcsinálta a LiveCD helyetted, így nem szükséges az előbbi parancs.
Ha készítettél 'home' partíciót, azt és a 'swap' partíciót sem kell csatolnod.

Viszont

-- ha létezik, azaz készítettél '/boot' partíciót (nem szokás) és a rendszerbetöltőd az MBR
akkor add ki a  következő parancsot - a logika ugyanaz ('z|Y')

sudo mount /dev/sdzY /mnt/boot

-- ha a rendszerbetöltőd az (U)EFI - a logika ugyanaz ('w|Y')

sudo mount /dev/sdwY /mnt/boot/efi

-- ha használod a LUKS-ot, akkor így csatolj - a logika ugyanaz ('x|Y')

sudo cryptsetup luksOpen /dev/sdxY sdxY_crypt

-- ha EXT fájrendszer helyett BRTFS-t használsz, akkor  így - a logika ugyanaz ('x|Y')

sudo mount -o subvol=@ /dev/sdxY /mnt

Majd a következő parancsokat add ki  - a sorrend fontos
     -- ez a legfontosabb rész

sudo mount -t devtmpfs /dev /mnt/dev
sudo mount -t devpts /dev/pts /mnt/dev/pts
sudo mount -t sysfs /sys /mnt/sys
sudo mount -t proc /proc /mnt/proc
sudo mount -t tmpfs /run /mnt/run
for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done
sudo cp /proc/mounts /mnt/etc/mtab
sudo mount -o bind /etc/resolv.conf /mnt/etc/resolv.conf
sudo chroot /mnt /bin/bash

és az utolsó paranccsal 'benn vagy' a telepített linux-ban (Mint-ben), mintha azt indítottad volna.
A 'sudo' használatát ezután elhagyhatod, mert rendszergazda környezetben vagy.

Végrehajthatsz frissítést, telepítést, GRUB telepítést, újratelepítést, javítást ('sudo' nélkül). Ezekről is szó lesz egy következő blogban

Kilépés a 'chroot' környezetből
-- a Ctrl + D billentyűk megközelítőleg egy időben történő megnyomásával vagy
-- az 'exit' paranccsal

-- ezután még le kell választanod a korábban csatolt eszközöket és ál-fájlrendszereket

sudo umount tmpfs /run /mnt/run
sudo umount proc /proc /mnt/proc
sudo umount sysfs /sys /mnt/sys
sudo umount devpts /dev/pts /mnt/dev/pts
sudo umount devtmpfs /dev /mnt/dev

# Lecsatolás, ha /boot partíciót csatoltál
(!az egyik módszert mutatom csak)

sudo umount /mnt/boot

-- lecsatolod az utolsó eszközt

sudo umount /mnt

-- újraindítod a rendszert
(kilépsz az általad indított LiveCD-rendszeréből)

sudo reboot

Forrás: https://wiki.ubuntuusers.de/chroot/Live-CD/

Hozzászólások

tresor képe

Boot flag

A chroot folyamat működéséhez szükséges-e a felcsatolandó / partíció boot flag-jének a megléte?
Tudunk olyan / partíciót chroot-olni amiről tudjuk, hogy az rendszer partíció, de nincs a partíciónak boot flag-je?

Értékelés: 

0
Még nincs értékelve
kimarite képe

Boot flag

#1 Több telepített rendszer esetén igaz lehet, hogy nem kell foglalkozni a boot zászló meglétével.

Értékelés: 

0
Még nincs értékelve
kimarite képe

Boot flag

#1.1 A rendszer partíció az UUID-k segítségével is kideríthető. Több telepített rendszernél némi gondolkodás, GParted, és hasonló alkalmazás segítségül vehető. Illetve, itt, zárszóként írtam még némi segítséget.

Mutatom

-- rákeresel a 'root=UUID' kifejezésre
(a boot könyvtárban keresel, és a hibaüzeneteket [2] egy fekete lyukba irányítod)

grep -ri root=UUID= /boot 2>/dev/null

-- a kimenet

/boot/grub/grub.cfg: linux /boot/vmlinuz-4.9.0-4-686 root=UUID=0ca6fc97-dfe4-492a-9dd1-7c8793bcf39f ro initrd=/install/initrd.gz quiet usbcore.autosuspend=-1
/boot/grub/grub.cfg: linux /boot/vmlinuz-4.9.0-4-686 root=UUID=0ca6fc97-dfe4-492a-9dd1-7c8793bcf39f ro initrd=/install/initrd.gz quiet usbcore.autosuspend=-1
/boot/grub/grub.cfg: linux /boot/vmlinuz-4.9.0-4-686 root=UUID=0ca6fc97-dfe4-492a-9dd1-7c8793bcf39f ro single initrd=/install/initrd.gz
/boot/grub/grub.cfg: linux /boot/vmlinuz-4.9.0-3-686 root=UUID=0ca6fc97-dfe4-492a-9dd1-7c8793bcf39f ro initrd=/install/initrd.gz quiet usbcore.autosuspend=-1
/boot/grub/grub.cfg: linux /boot/vmlinuz-4.9.0-3-686 root=UUID=0ca6fc97-dfe4-492a-9dd1-7c8793bcf39f ro single initrd=/install/initrd.gz

-- látszik a GRUB menük egy-egy sora (a keresés találata), de mindenhol ugyanaz az UUID látható

-- rákeresel a partícióid UUID-ire

sudo blkid

-- a kimenet

/dev/sda1: UUID="f4d1cc7b-2613-456e-bfbb-26b581f90332" TYPE="swap" PARTUUID="be73be73-01"
/dev/sda2: UUID="0ca6fc97-dfe4-492a-9dd1-7c8793bcf39f" TYPE="ext4" PARTUUID="be73be73-02"
/dev/sdb2: UUID="406b9c99-1491-41c0-8019-4fa926a38c68" TYPE="ext4" PTTYPE="dos" PARTUUID="3d3aa587-02"
/dev/sdb3: UUID="23b40ec7-60b2-48f2-a9b3-ee301d28955c" TYPE="ext4" PARTUUID="3d3aa587-03"

-- kiemeltem, ami ugyanaz, azaz ez (nálam) az 'sda2' partíció

-- megnézed az fdisk

sudo fdisk -l

-- a kimenet

Disk /dev/sda: 76,3 GiB, 81964302336 bytes, 160086528 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xbe73be73

Device     Boot   Start       End   Sectors  Size Id Type
/dev/sda1          2048   3905535   3903488  1,9G 82 Linux swap / Solaris
/dev/sda2  *    3905536 160086015 156180480 74,5G 83 Linux


Disk /dev/sdb: 74,5 GiB, 80026361856 bytes, 156301488 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x3d3aa587

Device     Boot    Start       End  Sectors  Size Id Type
/dev/sdb2        4004158  80078374 76074217 36,3G 83 Linux
/dev/sdb3       80084025 156296384 76212360 36,3G 83 Linux

-- és a parted alkalmazással is

sudo parted -l

-- a kimenet

Model: ATA Maxtor 6Y080L0 (scsi)
Disk /dev/sda: 82,0GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start   End     Size    Type     File system     Flags
 1      1049kB  2000MB  1999MB  primary  linux-swap(v1)
 2      2000MB  82,0GB  80,0GB  primary  ext4            boot


Model: ATA ST380011A (scsi)
Disk /dev/sdb: 80,0GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start   End     Size    Type     File system  Flags
 2      2050MB  41,0GB  38,9GB  primary  ext4
 3      41,0GB  80,0GB  39,0GB  primary  ext4

-- ebben az esetben a boot zászló is az 'sda2' partíción van, tehát e szempontból is az a rendszer partícióm, melyből ezen a gépen, nekem egy darab van, azaz egy telepített Linux-om van.
(a BIOS, a parted, az MBR és az UEFI kicsit máshogyan értelmezi a boot zászló fogalmát)

-- azonban a GRUB 'root=UUID=' sorában biztosan a rendszer partíciód UUID-je van, a boot zászlótól (flag) függetlenül. Ha több telepített rendszered van, akkor ... a cat, a less, a more parancsok valamelyikével megnézed (olvasod) a GRUB fájlt, mert a menükben utalás van, hogy melyik Linux rendszered tölti be az adott menü. Ez egy szövegtömbben van az UUID-kel.
A fájl, amit nézegetsz, ez: /boot/grub/grub.cfg
A 'grep' kimenetet kell alapul venned, mert nálad az egész más is lehet.

Példa:
(megnyitottam olvasásra a /boot/grub/ elérési úton a grub.cfg fájlt)

        menuentry 'Debian GNU/Linux, Linux 4.9.0-3-686 verzióval' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.9.0-3-686-advanced-0ca6fc97-dfe4-492a-9dd1-7c8793bcf39f' {
                load_video
                insmod gzio
                if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
                insmod part_msdos
                insmod ext2
                set root='hd0,msdos2'
                if [ x$feature_platform_search_hint = xy ]; then
                  search --no-floppy --fs-uuid --set=root --hint-ieee1275='ieee1275//disk@0,msdos2' --hint-bios=hd0,msdos2 --hint-efi=hd0,msdos2 --hint-baremetal=ahci0,msdos2  0ca6fc97-dfe4-492a-9dd1-7c8793bcf39f
                else
                  search --no-floppy --fs-uuid --set=root 0ca6fc97-dfe4-492a-9dd1-7c8793bcf39f
                fi
                echo    'Linux 4.9.0-3-686 betöltése…'
                linux   /boot/vmlinuz-4.9.0-3-686 root=UUID=0ca6fc97-dfe4-492a-9dd1-7c8793bcf39f ro initrd=/install/initrd.gz quiet usbcore.autosuspend=-1
                echo    'Kiinduló ramdisk betöltése…'
                initrd  /boot/initrd.img-4.9.0-3-686
        }

Na most a menü nevét (menuentry) vélhetően felismered. Nálam (csak) Debian. De ha lenne telepített Fedora, Ubuntu, Slackware vagy más Linux akkor azokra is jellemzőek a menü elnevezések. És, ha ez, azaz a birizgálandó (chroot) OS menü neve megvan, akkor lejjebb lapozol, és ott a (Fedora, Ubuntu, Slackware, stb. Linux) rendszer UUID-je is, amiről az imént írtam.

Még egyszer: Nekem MBR partíciós táblám van, ebből adódóan a teszt kimenetek nálad lehetséges, hogy mások lesznek, pl. a GPT partíciós táblánál nem a 'grub.cfg' fájl lesz a grep találata. De ez részletkérdés.

Értékelés: 

0
Még nincs értékelve
tresor képe

Boot flag

#1.1.1 Köszi szépen.Jó sok hasznos információ. Akkor a boot flag nem befojásolja a chroot helyes működését. Ha biztosra tudom, hogy az a partíció amit chroot-olni szeretnék, akkor a folyamat jól fog működni.

Értékelés: 

0
Még nincs értékelve
kimarite képe

Boot flag

#1.1.1.1 A lényeg, hogy külön nem kell ezzel foglalkoznod, hiszen boot partíció nélkül a kezdő lépés:

sudo mount /dev/sdxY /mnt

viszont, ha készítettél '/boot' partíciót (nem szokás)
... és a rendszerbetöltőd az MBR:

sudo mount /dev/sdzY /mnt/boot

... és a rendszerbetöltőd az (U)EFI:

sudo mount /dev/sdwY /mnt/boot/efi

a lépések ... stb. (a leírásban).

Akkor a fenti parancsok 'megtalálják' a boot zászló elhelyezkedését (ha az bármihez szükséges lenne), hiszen annak helyét a csatolni kívánt rendszered ismeri.
 

Értékelés: 

0
Még nincs értékelve