< Linux

Háttértárak

Szerző: Sallai András

Copyright © 2014, Sallai András

Szerkesztve: 2014, 2015, 2016, 2017, 2018

Licenc: 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
<code>
Egy lehetséges kimenet:
<code>
/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=<fajnev.iso> of=/dev/sd<1_betu>

Esetleg, az egyszerre olvasandó fájlok méretével:

sudo dd bs=4M if=<fajnev.iso> 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