[[oktatas:linux|< Linux]] ====== Háttértárak ====== * **Szerző:** Sallai András * Copyright (c) 2014, Sallai András * Szerkesztve: 2014, 2015, 2016, 2017, 2018 * Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC BY-SA 4.0]] * Web: https://szit.hu ===== Lemezek ===== Használt lemezk listázása az fdisk paranccsal: fdisk -l A kimenet egy lehetséges része: /dev/sdb lemez: 320.1 GB, 320072933376 bájt 255 fej, 63 szektor, 38913 cilinder Egység: cilinderek 16065 * 512 = 8225280 bájt Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Lemezazonosító: 0x05620561 Eszköz Indítás Eleje Vége Blokkok Az Rendszer /dev/sdb1 1 38913 312568641 83 Linux ===== UUID ===== Az UUID a háttértár azonosítója. Ennek lekérdezése: /sbin/blkid Egy lehetséges kimenet: /dev/sda5: UUID="959aff49-a06e-45ab-9392-61c7359700e9" SEC_TYPE="ext2" TYPE="ext3" /dev/sda6: UUID="ca5dd512-4352-4eaf-8f75-e72d8f87a175" SEC_TYPE="ext2" TYPE="ext3" /dev/sdb1: LABEL="tartaly" UUID="633ef46a-a389-4001-9a6b-36d8e73207dc" SEC_TYPE="ext2" TYPE="ext3" /dev/sda1: UUID="CCE85AACE8AA946C" TYPE="ntfs" /dev/sda2: UUID="0fc85104-331c-48dd-8f9d-0f3b4157686d" TYPE="ext4" /dev/sda3: UUID="1fa554e5-efc9-400e-8d2d-3efb5492fd59" TYPE="swap" /dev/sdc1: LABEL="Adat" UUID="4E17539F5B6BE693" TYPE="ntfs" Vegyük észre, hogy az elnevezett partíciók soraiban szerepel egy "LABEL" sor. Az /sbin/blkid parancs az util-linux csomagban található. ===== Az fstab rendszerben használható azonosítók ===== A címkézett lemezek nevei az alábbi módon is listázhatók: ls /dev/disk/by-label Lehetséges kimenet: Adat tartaly vagy így: ls /dev/disk/by-uuid 0fc84104-331c-48dd-8f9d-0f3b4157686d 979aff49-a06e-45ab-9392-61c7359700e9 1fa5d4e5-efc9-400e-8d2d-3efb5492fd59 caadd512-4352-4eaf-8f75-e72d8f87a175 4E17E39F5B6BE693 CCE8AAACE8AA946C 633ef46a-a389-4001-9a6b-36d8e73207dc ===== Swap ===== A swap fájl létrehozása: swapoff /dev/XXYn mkswap -L foobar /dev/XXYn ===== USB kulcs és az ISO fájl ===== A célunk egy ISO fájl kiírása egy pendrive-ra. Tegyük be a pendrive-ot. Ki kell derítenünk, a pendrive milyen betűjellek került a rendszerbe. Grafikus felületen ehhez a gparted programot szoktuk használni, de nekünk most parancssoros megoldás kell: fdisk -l vagy: cfdisk Ez utóbbi menüs rendszerrel rendelkezik, ahol a jobbra balra billentyűvel közlekedhetünk. Csatoljuk le a pendrive-ot. sudo umount /dev/sd<1 betű>[opcionálisan 1 szám] Ez után kiírhatjuk a fájlt: sudo dd if= of=/dev/sd<1_betu> Esetleg, az egyszerre olvasandó fájlok méretével: sudo dd bs=4M if= of=/dev/sd<1 betű> Hogyan paraméterezzük a dd-t? A megfelelő blokk méretet a merevlemez fizikai geometriájához igazítjuk. Ha cilinderenként 8 szektor van, akkor azt felszorozzuk 512-vel. 8*512=4096 Így a bs=4096 ===== Partíció egészének és az MBR-nek a mentése ===== ==== MBR ==== Az MBR mentése fájlba: # dd if=/dev/sda of=/tmp/mbr.bin bs=512 count=1 A kimentett fájlba nézzünk bele a hexer nevű hexa szerkesztővel: # apt-get install hexer $ hexer mbr.bin Használhatjuk a hte szerkesztőt is. Telepítés: # apt-get install ht Használat: $ het mbr.bin Esetleg használhatjuk a hexcurse programot: # apt-get install hexcurse $ hexcurse mbr.bin Vagy a hexeditor programot: # apt-get install ncurses-hexedit $ hexeditor mbr.bin hexdump -C -s 446 mbr.bin 000001be 80 20 21 00 83 fe ff ff 00 08 00 00 00 30 a4 0b |. !..........0..| 000001ce 00 fe ff ff 82 fe ff ff 00 38 a4 0b 00 68 59 00 |.........8...hY.| 000001de 00 fe ff ff 83 fe ff ff 00 a0 fd 0b 00 38 a4 0b |.............8..| 000001ee 00 fe ff ff 05 fe ff ff fe df a1 17 02 88 ce 5c |...............\| 000001fe 55 aa |U.| 00000200 A hexdump a bsdmainutils csomagban van. Információ az állományról: file mbr.bin mbr.bin: DOS/MBR boot sector; GRand Unified Bootloader, stage1 version 0x3, stage2 address 0x2000, stage2 segment 0x200 Csak a partíciós tábla visszaállítása az MBR mentésből: # dd if=mbr.bin of=/dev/sdx count=64 bs=1 skip=446 seek=446 ==== Partíció mentése, visszaállítása ==== Mentés: # sfdisk -d /dev/sda > /tmp/sda.bak Visszaállítása: # sfdisk /dev/sda < /tmp/sda.bak ===== Hibás blokkok kezelése ===== A hibás blokkok angolul bad sectors vagy bad blocks. A hibás blokkok a lemezegységek olyan részei amelyek használhatatlanok, mert maradandó károsodást szenvedtek, az operációs rendszer nem képes azokat használni. Ellenőrizzük, hogy telepítve van-e az e2fsprogs csomag: # dpkg -l e2fsprogs Ha nincs, telepítsük a következő paranccsal csomagot: # apt install e2fsprogs Először írassuk ki, milyen lemezegységek vannak: # fdisk -l Keressük meg a hibás szektorokat: # badblocks -v /dev/sdb > /tmp/hibasSzektorok.txt Az sdb-t természetesen javítsuk a kívánt meghajtónévre. A futtatás után a /tmp/hibasSzektorok.txt fájlban minden információ rendelkezésre áll a hibás részekről. Csatoljuk le a /dev/sdb partíciót ha csatolva lenne. umount /dev/sdb Most mondjuk meg az operációs rendszernek, hogy ne használja ezeket a részeket: # e2fsck -l /tmp/hibasSzektorok.txt /dev/sdb Még több segítséget kaphatunk: $ man badblocks $ man e2fsck Felhasznált forrás: * http://www.linuxtechi.com/check-hard-drive-for-bad-sector-linux/ Egyéb linkek: * https://www.smartmontools.org/browser/trunk/www/badblockhowto.xml * http://www.tecmint.com/check-linux-hard-disk-bad-sectors-bad-blocks/ * http://www.howtogeek.com/howto/37659/the-beginners-guide-to-linux-disk-utilities/ ==== smartmontools ==== # apt install smartmontools # smartctl -H /dev/sda10 ===== A dd parancs ===== A dd egy másoló parancs. Állományokat, cserehelyet hozhatunk létre vele. Alkalmas egy partíció mentésére bitről bitre, a legelső bittől az utolsóig. De ki is írhatunk vele egy mentett partíciót egy tárolóra. Ha egy CD tartalmát mentjük azt általában .iso kiterjesztéssel mentjük. Egy merevlemezt, egy elektronikus tárolót, vagy régebbi floppy lemezt, egy .img kiterjesztésű fájlba szokás menteni. Ha szeretnénk a sdb partíciót lementeni az első bittől az utolsóig: dd if=/dev/sdb of=/mentesHelye/sdb.img A dd parancs alapértelmezetten 512 bájtos blokkmérettel dolgozik. Beállítható a bs paraméterrel más blokkméret is. dd bs=4K if=/dev/sdb of=/mentesHelye/sdb.img Elvileg így gyorsabb átvitel érhető el. Ha folyamatot is szeretnénk látni: dd bs=4K if=/dev/sdb of=/mentesHelye/sdb.img status=progress Ha sikeres átvitel után szeretnénk szinkronizálni a tárolókat: dd bs=4K if=/dev/sdb of=/mentesHelye/sdb.img status=progress && sync Ha szeretnénk megadni hány blokk kerüljön átvitelre, használjuk a count opciót: dd bs=4K if=/dev/sdb of=/mentesHelye/sdb.img \ status=progress count=1024K && sync A parancs kipróbálásához használhatjuk a /dev/zero fájlt bemenetkén, a kimenet pedig egy tetszőleges fájl. dd if=/dev/zero of=tesztFajl count=1 A parancs egy 512 bájtos álományt hoz létre. A oflag=direct rábírja, a dd-t, hogy azonnal írja tárolóra az átvitt adatokat, így kihagyható a végén a sync parancs. Így a dd nem használja az átmeneti tárolót, közvetlenül használja az I/O rendszerhívást: dd if=/dev/zero of=tesztFajl count=1 oflag=direct A dsync jelölő használja az átmeneti tárat, de azonnal szinkronizál minden adatot, nem beleértve a metaadatokat: dd if=/dev/zero of=tesztFajl count=1 oflag=dsync A sync kapcsoló hasonló az előzőhöz, de azonnal szinkronizálja a metaadatokat is. dd if=/dev/zero of=tesztFajl count=1 oflag=sync A conv=fdatasync is az azonnali szinkronizálást szolgálja, de csak az adatokra vonatkozik a metaadatokra (fájlokat leíró adatok) nem: dd if=/dev/zero of=tesztFajl count=1 conv=fdatasync Ha metaadatokat is azonnal lemezre szeretnénk írni: dd if=/dev/zero of=tesztFajl count=1 conv=fsync ===== Virtuális blokkeszköz ===== Létrehozás: $ dd if=/dev/zero of=egy.img bs=1M count=1 1+0 beolvasott rekord 1+0 kiírt rekord 1048576 bájt (1,0 MB, 1,0 MiB) másolva, 0,0367022 s, 28,6 MB/s Ellenőrzés: $ du -s -h egy.img 1,0M egy.img Loopeszköz létrehozása: # losetup -f -P egy.img Formázás: # mkfs.ext4 egy.img Csatolás: # mkdir /mnt/loopfs # mount -o loop /dev/loop0 /loopfs Ellenőrzés: # df -h -P /loopfs/ Csatolás megszüntetése: # umount /dev/loop0 Loopeszköz megszüntetése: # losetup -d /dev/loop0 ===== Virtuális blokkeszköz particionálása ===== # fdisk egy.img Welcome to fdisk (util-linux 2.29.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Device does not contain a recognized partition table. Created a new DOS disklabel with disk identifier 0x6df05739. Command (m for help): g Created a new GPT disklabel (GUID: 2EF77538-E4CC-4991-A5A0-EE971D4CA5E6). Command (m for help): n Partition number (1-128, default 1): First sector (34-2014, default 34): Last sector, +sectors or +size{K,M,G,T,P} (34-2014, default 2014): 1024 Created a new partition 1 of type 'Linux filesystem' and of size 495,5 KiB. Command (m for help): n Partition number (2-128, default 2): First sector (1025-2014, default 1025): Last sector, +sectors or +size{K,M,G,T,P} (1025-2014, default 2014): Created a new partition 2 of type 'Linux filesystem' and of size 495 KiB. Command (m for help): w The partition table has been altered. Syncing disks. # # fdisk -l egy.img Disk /home/janos/egy.img: 1 MiB, 1048576 bytes, 2048 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: gpt Disk identifier: 2EF77538-E4CC-4991-A5A0-EE971D4CA5E6 Device Start End Sectors Size Type /home/janos/egy.img1 34 1024 991 495,5K Linux filesystem /home/janos/egy.img2 1025 2014 990 495K Linux filesystem Loopeszköz létrehozása: # losetup -f -P egy.img # # losetup -a /dev/loop0: [2055]:1094583 (/home/janos/egy.img) # blokkeszközök listázása: # lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT loop0 7:0 0 1M 0 loop ├─loop1p1 259:0 0 495,5K 0 loop └─loop1p2 259:1 0 495K 0 loop ... # mkfs.ext2 /dev/loop0p1 mke2fs 1.43.4 (31-Jan-2017) Fájlrendszer létrehozása 492 1 blokkal és 64 inode-dal Csoporttáblák foglalása: kész Inode táblák írásakor: kész Szuperblokkok és fájlrendszer-könyvelési információk írása: kész # mkfs.ext2 /dev/loop0p2 mke2fs 1.43.4 (31-Jan-2017) Fájlrendszer létrehozása 492 1 blokkal és 64 inode-dal Csoporttáblák foglalása: kész Inode táblák írásakor: kész Szuperblokkok és fájlrendszer-könyvelési információk írása: kész # mkdir /mnt/d # mkdir /mnt/e # mount /dev/loop0p1 /mnt/d # mount /dev/loop0p2 /mnt/e Eltávolítás: umount /dev/loop0p1 umount /dev/loop0p2 losetup -d /dev/loop0 ===== A kpartx ===== Ha van egy disk.img # kpartx -l disk01.img loop0p1 : 0 991 /dev/loop0 34 loop0p2 : 0 990 /dev/loop0 1025 kpartx -a disk01.img Ellenőrzés: # ls /dev/mapper control loop0p1 loop0p2 # lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT loop0 7:0 0 1M 0 loop ├─loop0p1 254:0 0 495,5K 0 part └─loop0p2 254:1 0 495K 0 part # mkdir /mnt/d # mount /dev/mapper/loop0p1 /mnt/d Megszüntetés: # kpartx -d disk01.img loop deleted : /dev/loop0 # # ls /dev/mapper control ===== FAT fájlrendszer ===== Formázás: # mkfs.vfat /dev/sdb1 Címkézés: # fatlabel /dev/sdb1 PENDRIVE01 Van egy **dosfslabel** parancs is, de az csak egy link fatlabel parancsra. ===== FAT szimulált eszközön ===== $ dd if=/dev/zero of=egy.img bs=1M count=1 # losetup -f -P egy.img # fdisk -l Lehetséges kimenet: Disk /dev/loop0: 1 MiB, 1048576 bytes, 2048 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 # cfdisk /dev/loop0 A cfdisk segítségével létrehozzuk a /dev/loop0p1 partíciót. Kiválasztjuk a "c" típust, azaz W95 FAT32 (LBA)-t. Ellenőrizzük: fdisk -l Device Boot Start End Sectors Size Id Type /dev/loop0p1 1 2047 2047 1023,5K c W95 FAT32 (LBA) Megformázzuk: # mkfs.vfat /dev/loop0p1 mkfs.fat 4.1 (2017-01-24) A fájlrendszert ellenőrizhetjük a cfdiks parancs újbóli megnyitásával. # cfdisk /dev/loop0 ┌────────────────────────────────────────────────────────────────────────────┐ │ Partition type: W95 FAT32 (LBA) (c) │ │Filesystem UUID: CD8E-1F4E │ │ Filesystem: vfat │ └────────────────────────────────────────────────────────────────────────────┘ Az ellenőrzés elvégezhető a parted paranccsal is: parted -l A kimenet ehhez hasonló lehet: Number Start End Size Type File system Flags 1 16,4kB 15,7GB 15,7GB primary fat32 lba További lehetőségek: blkid df -Th df -Th | grep ^/dev lsblk -f mount | grep ^/dev file -sL /dev/loop0p1 fsck -N /dev/loop0p1 Utóbbi használata: # fsck -N /dev/loop0p1 fsck from util-linux 2.29.2 [/sbin/fsck.vfat (1) -- /dev/loop0p1] fsck.vfat /dev/loop0p1 A -N hatására ellenőrzés nem történik, csak megmutatja mi lehetne a kimenet. Felirat beállítása: fatlabel /dev/loop0p1 DEVICE01 Ellenőrzés: lsblk -o name,label,size Csatolás, használat: mkdir /mnt/c mount /dev/loop0p1 /mnt/c ===== Címzés ===== A merevlemezek esetén az adatok címzésére kétféle módot használunk: * CHS -- Cylinder, Head, Sector * LBA -- Linear Block Address A lemezen az adatok sávokban tárolódnak, amelyek szektorokra vannak felosztva. Több lemez esetén az egymás felett elhelyezkedő sávokat cilindernek nevezzük. Az adatok címzésének egyik lehetséges módja a cilinder, fej és szektor megadásával történik. A CHS-t 504 MB méret alatti merevlemezek esetén használták. Ezzel a módszerrel 1024 cilinder, 16 fej és 63 szektor a maximális megadható értékek. A valódi fizikai geometriát persze csak a lemezvezérlő ismeri. Az 504 MB-nál nagyobb lemezek kezelésére kitalálták az ECHS, azaz az Extended CHS. Ez valójában azt jelenti, hogy a BIOS egy fordítás végez, Így képes kezelni 504 MB-nál nagyobb lemezek kezelésére is. Az operációs rendszer a BIOS-tól már az átalakított geometriát kapja. A ECHS címzésnek is van határa, csak 8,4 GB lemezméretig használható. Az LBA esetén lemezt egyszerűen blokkokra osztjuk, amelyet megszámozunk. A címzés ezen blokkokra való hivatkozással történik. A BIOS természetesen itt is elvégez egy geometriai átalakítót. ===== iwatch ===== Fájlrendszer figyelése valós időben. Telepítés: # apt install iwatch Használat példák: $ iwatch /tmp $ iwatch -r -e access,create -m root@pelda.com -x /etc/mail /etc $ iwatch -r -c (w;ps -ef)|mail -s '%f was changed' root@localhost /bin $ iwatch -r -X '.svn' ~/projects ===== Függelék ===== ==== Particiónáló programok ==== * fdisk * sfdisk * cfdisk * gdisk * gparted * parted Lemezmásolás: * ddrescue -- apt install gddrescue * clonezilla -- apt install clonezilla * dd Újraméretezés: * ntfsresize Egyéb: * blockdev ==== Gyakorlás háttértárakon ==== * Virtuális lemez készítése * FAT32-re formázás * Felirat beállítása * Ellenőrzés * Csatolás $ dd if=/dev/zero of=egy.img bs=1M count=1 # losetup -f -P egy.img # fdisk -l Lehetséges kimenet: Disk /dev/loop0: 1 MiB, 1048576 bytes, 2048 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 # cfdisk /dev/loop0 A cfdisk segítségével létrehozzuk a /dev/loop0p1 partíciót. Kiválasztjuk a "c" típust, azaz W95 FAT32 (LBA)-t. Ellenőrizzük: fdisk -l Device Boot Start End Sectors Size Id Type /dev/loop0p1 1 2047 2047 1023,5K c W95 FAT32 (LBA) Megformázzuk: # mkfs.vfat /dev/loop0p1 mkfs.fat 4.1 (2017-01-24) A fájlrendszert ellenőrizhetjük a cfdiks parancs újbóli megnyitásával. # cfdisk /dev/loop0 ┌────────────────────────────────────────────────────────────────────────────┐ │ Partition type: W95 FAT32 (LBA) (c) │ │Filesystem UUID: CD8E-1F4E │ │ Filesystem: vfat │ └────────────────────────────────────────────────────────────────────────────┘ Az ellenőrzés elvégezhető a parted paranccsal is: parted -l A kimenet ehhez hasonló lehet: Number Start End Size Type File system Flags 1 16,4kB 15,7GB 15,7GB primary fat32 lba További lehetőségek: blkid df -Th df -Th | grep ^/dev lsblk -f mount | grep ^/dev file -sL /dev/loop0p1 fsck -N /dev/loop0p1 Utóbbi használata: # fsck -N /dev/loop0p1 fsck from util-linux 2.29.2 [/sbin/fsck.vfat (1) -- /dev/loop0p1] fsck.vfat /dev/loop0p1 A -N hatására ellenőrzés nem történik, csak megmutatja mi lehetne a kimenet. Felirat beállítása: fatlabel /dev/loop0p1 DEVICE01 Ellenőrzés: lsblk -o name,label,size Csatolás, használat: mkdir /mnt/c mount /dev/loop0p1 /mnt/c ===== Forrás ===== * http://wiki.debian.org/Part-UUID * http://wiki.debian.org/fstab * man dd * http://www.dewassoc.com/kbase/hard_drives/master_boot_record.htm * https://en.wikipedia.org/wiki/Master_boot_record