[[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