SPOJE.NET

Technická dokumentace

Uživatelské nástroje

Nástroje pro tento web


howto:hw:disky

HardDisky

Plotnové

SSD

  • ve SMARTu je potreba sledovat
    • Wear leveling count
      • pocet prepisu nejstarsi bunky.
      • z toho se pocita normalizovana hodnota, ktera klesa od 100% u noveho disku k 0% pak uz je to otazka…
    • Media Wearout Indicator
      • Asi neco podobnyho, ale presne nevim… evidentne maj disky bud jedno nebo druhy
  • Znacky
    • aktualne mam velmi dobre skusenosti s Samsungom, Samsung SSD 840 PRO Series
    • od znamych mam este info ze intely 500 a vyssia rada su gut tiez

SW Aspekty

Rozdeleni disku

  • MBR (disky ⇐2TB)
    • fdisk, sfdisk, cfdisk
    • kopie rozdeleni a → b: sfdisk -d /dev/sda | sfdisk /dev/sdb
  • GPT (disky >2TB)
    • gdisk, sgdisk, cgdisk
    • kopie rozdeleni a → b: sgdisk -R=/dev/sdb /dev/sda; sgdisk -G /dev/sdb
    • jina varianta pokud predchozi nefunguje: a → b: sgdisk --backup=table /dev/sda; sgdisk --load-backup=table /dev/sdb

RAID pomoci mdadm

  • Partition type: Linux RAID autodetect 0xFD (0xFD00 u GPT)
  • mdadm --create /dev/md0 --level=1 --bitmap=internal --raid-devices=2 /dev/sda1 missing
  • mdadm --manage /dev/md0 --add /dev/sdb1
  • mdadm --manage /dev/md0 --fail /dev/sdb1
  • mdadm --manage /dev/md0 --remove /dev/sdb1
  • mdadm /dev/md2 --fail /dev/sdc3 --remove /dev/sdc3
  • mdadm --grow --bitmap=internal /dev/md0
  • mdadm --grow --bitmap=none /dev/md0
  • mdadm --monitor --scan -1 -t (test sending of error e-mails)
  • echo "idle" > /sys/block/md0/md/sync_action (defer active resync)
  • sysctl -w dev.raid.speed_limit_min=500000000; sysctl -w dev.raid.speed_limit_max=500000000 (unthrottle raid sync)

Přidání dalšího disku do raidu s UEFI boot

  • mdamd --grow --raid-devices=2 --force /dev/md127 (–force je potreba pokud byl puvodne raid1 zalozen jen s jednim diskem)
  • mdadm --manage /dev/md127 --add /dev/sdb3
  • umount /boot/efi - je potreba odpojit puvodni EFI partiton, ktera je pravdepodobne na sda2
  • mkfs.vfat /dev/sdb2 - musime prirpavit EFI partici na novem disku
  • mount /dev/sdb2 /boot/efi nyni pripojime novou EFI partici do puvodniho umisteni.
  • grub-install /dev/sdb
  • standardne nepotrebujeme mit pripojenou /boot/efi v FSTAB, ale je potreba myslet na to, ze pri upgradu kernelu musime OBE partice postupne pripojit a zapsat na ne aktualni verzi grubu !!

Pri tomto postupu dokazeme nabootovat do zalozniho kopie systemu v pripade potizi s primarnim diskem.

Zvětšení RAID pole

Chceme zvětšit pole např. o velikosti 500G na nové disky o velikosti 1TB. Ideální je to dělat na degradovaném poli, protože tím získáme zároveň zálohu původního pole.

  • Vyměníme jeden z disků za větší. Po startu systému bude pole degradované. Na novém disku vytvoříme nové partice typu Linux RAID autodetect 0xFD (0xFD00 u GPT) po celé délce disku, případně jak potřebujeme, pokud raidů máme více. Bude samořejmě vetší než aktivní partice v raidu.
  • Novou partici přídáme do raidu - mdadm --manage /dev/md0 --add /dev/sdb1 a počkáme, až se pole syncne.
  • Nezapomeneme zapsat grub na nový disk, abychom po dokončení operace nastartovali system - tj. grub-install /dev/sdb!!!

následující operaci bude nutné provádět v jiném systému = např. nějaká live distribuce s podporou raidu, např. https://partedmagic.com/downloads/

  • Odebereme původní mensi disk a pridame druhý větší disk
  • Nastartujeme live distribuci a složíme pole. Bude nyní degradované s novým diskem.
  • Zadáme mdadm --grow /dev/md0 --size=max (zvětšíme pole na maximum velikosti partice)
  • Kontrola filesystemu - e2fsck -f /dev/md0
  • Zvětšíme filesystém - resize2fs -p /dev/md0
  • Upravíme partice na druhém disku a přidáme do raid pole viz. výše.
  • Nyní můžeme restartovat zpět do původního systému, synchronizace raidu bude potom pokračovat. V biosu bude nutné bootování přepnout na disk, který jsme měnili jako prvni. Po nastartování systému bude nutné také zapsat grub na druhý disk.

Pokud system nestartuje na degradovanem sw raidu

V Debianu Jessie se nám stalo, že po vyjmutí jednoho z disků začal debian startovat do ramdisku s chybou, že nemůže najít rootfs. Z nějakého důvodu nedošlo k automatickému startu degradovaného pole a proto bylo potřeba provést následující úpravu ramdisku:

  • Přidat skript
/etc/initramfs-tools/scripts/init-premount/mdadm-start
#/bin/sh
mdadm --run /dev/md*
exit 0
  • chmod 755 /etc/initramfs-tools/scripts/init-premount/mdadm-start
  • update-initramfs -u

Pripadnou chybu, ze /dev/md je adresarem muzete ignorovat.

LVM

  • Partition type: Linux LVM 0x8E
  • PV pvcreate /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
    • overime pvs nebo pvdisplay
    • smazem pvremove …
  • VG vgcreate fileserver /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
    • overime vgs nebo vgdisplay
    • autodetekce vgscan
    • prejmenujem vgrename fileserver data
    • smazem vgremove fileserver
  • LV lvcreate –name backup –size 5G fileserver
    • overime lvs nebo lvdisplay
    • autodetekce lvscan
    • prejmenujem lvrename fileserver backup zalohy
    • smazem lvremove /dev/fileserver/backup
    • zvetsime
      • pvresize /dev/sdb1 roztahne PV pres celou zvetsenou partici
      • lvextend -L5.5G /dev/fileserver/backup
      • lvextend -L+5.5G /dev/fileserver/backup zvetsim o dalsich 5.5G
      • e2fsck -f /dev/fileserver/backup
      • resize2fs /dev/fileserver/backup
        • POZOR: U ext4 provadej resize2fs online - nejprve mount napr do. /mnt
      • xfs_growfs /mnt zvetsi xfs pripojene do adresare /mnt
    • zmensime (opatrne!)
      • e2fsck -f /dev/fileserver/backup
      • resize2fs /dev/fileserver/backup 10485760
      • lvreduce -L5G /dev/fileserver/backup

LVM Thin

  • LV lvcreate -L 100G -n data pve
  • LV → thin-pool lvconvert –type thin-pool pve/data
    • Thin-pool muzem nyni pridat do proxmoxu a ten si v nem bude delat thinlv pro virtualy a kontejnery
    • Nebo si v nem vytvorime vlastni thinlv
  • ThinLV lvcreate -n thin1 -V 1T –thinpool data pve
  • Zobrazit lvm vcetne thin-pool - lvs -a
  • Zvetseni thin-poolu o 256G - lvextend -L+256G /dev/vg/thinpool - zmensovat nejde
  • Zvetseni metadat thin poolu - lvextend –poolmetadatasize +100M vg/thinpool
  • Zvetseni vcetne metadat - lvresize –size +<size[\M,G,T]> –poolmetadatasize +<size[\M,G]> <VG>/<LVThin_pool>
  • Oprava (POZOR! OPATRNE!)

https://www.redhat.com/archives/linux-lvm/2016-January/msg00010.html So if you feel the time spend on thin_checking doesn't pay-off - you can try to add option '–skip-mappings' (see lvm.conf field global/thin_check_options)

/etc/lvm/lvm.conf
...
thin_check_options = [ "--skip-mappings" ]
...

Ext4

Zvetsit zurnal:

tune2fs -O ^has_journal /dev/hdXX
tune2fs -l /dev/hdXX
tune2fs -J size=128 /dev/hdXX

ZFS

  • Rozdelime disky: typ partice BF(00) = Solaris Root (ale muzem pouzit i primo cely disky, v takovym pripade se partice vytvori samy)
  • Vytvorime hlavni systemovy ZFS uloziste s mirrorem (neco jako VG u LVM)
    • zpool create tank mirror /dev/sda /dev/sdb
      • Nekdy je dobry pridat parametr -o ashift=12, kde hodnota ashift = exponent 2 pro zarovnani na sektory. 2^9=512B sektory, 2^12=4096B sektory,… Nejde to menit po naformatovani, nicmene default by mel bejt vic nez rozumny reseni, takze bych se spis vyhnul rejpani se v tomhle
      • Také se doporučuje přidávat disky podle id, např.: /dev/disk/by-id/wwn-NECONECO kvůli spolehlivější detekci
    • #zpool set listsnapshots=on tank neni potreba, tyka se jen vypisu "zfs list", jinak se snapshoty daj normalne i bez toho vypsat ls -la /tank/.zfs/snapshot/
    • #zfs set recordsize=16k tank (nastavit recordsize na stejnou velikost jako pouziva db. aplikuje se jen pro nove soubory: default=128k, innodb-data=16k, innodb-log=128k, myisam=8k, postgresql=8k, sysbench=16k)
    • #zfs inherit recordsize tank (nastavit recordsize na vychozi hodnotu)
    • zfs set atime=off tank (vypne atime)
    • #zfs set logbias=throughput tank (vypne dvoji zapis dat pres SLOG, nejsem si jisty, ze je to vzdy dobre pro vykon, zalezi na konfiguraci SLOGu)
    • zfs set compression=on tank (default kompresni algoritmus by mel bejt vcelku rychlej a napr. eliminuje dlouhy retezce nul)
    • #zfs set dedup=on tank #deduplikace zere MOOC ramky = asi 8GB ram na 1TB dat! pomoci prikazu zdb -S tank lze zjistit jestli se deduplikace vyplati (pokud to vypise dedup=2.00 nebo vic, tak se vyplati. Pokud vynasobime total allocated blocks cislem 320, vyjde nam potrebna ramka)
    • zpool list a zpool status
    • zfs get all tank
  • V tomto ulozisti vytvorime ZFS pro LXC a pripojime
    • zfs create tank/vps
    • Pokud pouzivame proxmox, tak tady zkoncime a zbytek naklikame v proxmoxu!
    • zfs set mountpoint=/var/lib/lxc tank/vps
    • mountpoint nesmi existovat, ZFS si automaticky adresar vytvori pri pripojeni a smaze pri odpojeni.
  • Vytvorime novej virtual s quotou (tohle uz dela LXC automaticky)
    • zfs create tank/vps/test
    • zfs set quota=10G tank/vps/test
  • Fsck: zpool scrub tank (prubeh sledujem v zpool status)
  • Vsechno smazem (neni dobry napad): #zpool destroy tank
  • zpool status Vypise vsechny disky v poolu, jestli nedochazi k datovym chybam, jestli probiha scrub, resilver, atd…
  • Log a cache na SSD
    • Typy pomocnejch devicu
      • "log", take nazyvany "zil" nebo "slog" je zurnal synchronnich zapisu
      • "cache" neboli "l2arc" ("level 2 arc") je cache pro cteni
      • ani u jednoho nevadi vypadek, v cache jsou jen data precteny z rotacniho disku a vsechno co je v logu je i v RAMce, log by se pouzil jen pri vypadku napajeni, kdy bysme o RAMku prisli
    • Dimenzovani
      • velikost logu staci cca 0.6 GB na kazdy gigabit sitovky co mame na systemu. 16GB by tedy melo s obri rezervou stacit i pro pripady ze budem mit 2x10G sitovku. Flushuje se jednou za 5 sekund, takze staci kdyz se do nej vejdou vsechny synchronni zapisy co probihaj za 5 sekund. (= ano, vic nez 16GB tezko budem v soucasnosti potrebovat, i to je fakt hodne, prakticky staci asi 1GB nebo min)
      • na cache je potom dobre vyuzit vsechno misto co nam na SSD zbyde po logu (cim vic, tim lip. dava smysl, aby byla cache radove vetsi nez log i L1ARC, ale jejich velikosti spolu primo nijak nesouvisi)
    • log a cache vzdy pridavame jako /dev/disk/by-id/ nemaji metadata!!!
    • zpool add tank log /dev/loop0
    • zpool add tank cache /dev/loop1
    • zpool iostat -v vypise obsazeni logu a cache (a vsech jednotek v poolu)
    • zpool remove tank /dev/loop0 /dev/loop1
  • Vymena disku v RAIDu (konzultovat s harviem!!!)
    • zpool detach tank sdb2
    • zpool attach tank sda2 sdb2 (asi dava spis smysl attachnout celej prazdnej disk, oddily si vytvori ZFS samo)
  • Aktivace automatickyho zvetsovani zrcadla (asi dobry udelat uz pred vymenou disku za vetsi)
    • zpool set autoexpand=on tank
  • ZVOL (= neco jako LVM uvnitr ZFS poolu, doporuceny na swapy a image virtualu!)
    • zfs create -V 5gb tank/vol (vytvori jednotku /dev/zvol/tank/vol, taky znamy jako /dev/zd0, parametr -s udela zvol bez rezervace diskovyho prostoru v poolu = thin-provisioning)
    • zfs list -t volume vypiseme si zvoly (bez -t volume to vypise vse v poolu)
    • zfs destroy tank/vol
  • Autodetekce existujiciho ZFS
    • zpool import nebo zpool import -a pro exportnuty
    • zfs mount -a
  • SWAP na ZFS
    • Swapovani do souboru na ZFS neni podporovano, ale snad se da pouzit ZVOL jako swap
    • Nicmene jsou tam problemy (ZFS nekdy potrebuje pri zapisu do zvolu samo swapovat, coz je dost nemily predpoklad pro zapis do swapu = zpusobuje zamrznuti)
      • nekdo tvrdi, ze pomuze ZVOLu nastavit logbias=troughput a compress=zle, nicmene jsem netestoval
      • urcite to chce mit nastaveny hung_task a reboot pri panicu
  • Vylepseni pro backup destinace
    • zfs set readonly=yes tank/backup - zabranime systemu menit zalohy (recv stale funguje)
    • zfs set volmode=none tank/backup - schovame ZVOLy pred systemem (aby nam je nedetekoval treba mdraid nebo lvm)
  • Testovani ZFS
    • Ztest NESLOUŽÍ k testování zfs modulu v jádře!!! Pro otestovani systemu je naprosto nevhodny.
      • ztest -f /tmp -VV vytvori v /tmp blockfily s testovacim ZFS a spusti na nem unit testy (musi tam byt dost mista).
      • Jde prodlouzit cas v sekundach, defaultne -T 300
  • Dalsi zdroje

Je dobry omezit kolik RAM muze sezrat ARC (defaultne si bere 1/2 veskery ramky na Linuxu a 3/4 na Illumosu):

/etc/modprobe.d/zfs.conf
#echo '(1024^3)*10' | bc
#update-initramfs -u -k all
options zfs zfs_arc_max=10737418240

ZFS replikace

  • zdroj# zfs snapshot tank/vps/subvol-300-disk-1@mujsnapshot
  • zdroj$ su -c "zfs send tank/vps/subvol-300-disk-1@mujsnapshot" | pv | ssh strojcilovy sudo zfs recv -F tank/vps/subvol-300-disk-1
  • cil#

NILFS2

  • mkfs.nilfs2 -L LABEL /dev/sdx1
  • lscp /dev/sdx1 Vypiseme checkpointy (historii)
  • chcp ss /dev/sdx1 94 Nastavime checkpoint #94 jako snapshot (= nebude smazan cleanerem a pujde pripojit)
  • mount -o ro,cp=94 /dev/sdx1 /mnt/ Pripojime readonly snapshot #94
  • chcp cp /dev/sdx1 94 Po odpojeni zrusime snapshot #94 (udelame z nej zpatky checkpoint)

SATA HotSwap

  • readlink /sys/block/sda (zjisti na jaky sbernici je disk sda)
  • echo 1 > /sys/block/sda/device/delete (odpoji disk sda)
  • echo "- - -" > /sys/class/scsi_host/host0/scan (najde disky na sbernici host0)

Fyzická identifikace disku

Pomocí LED

Pokud má stroj modré identifikační led diody u jednotlivých šuplíčků disku, je možné je rozsvítit nebo zhasnout následujícím příkazem z balíčku ledmon:

  • ledctl locate=/dev/sda
  • ledctl locate_off=/dev/sda

Je možné použít i hierarchické označení disku (např. /dev/disk/by-id/[drive-id], atd…)

Host Protected Area (HPA)

Precti si o tom neco nez to zacnes pouzivat!

  • Zakazat v GRUBu: libata.ignore_hpa=1
  • Overit: cat /sys/module/libata/parameters/ignore_hpa
  • Zjistit stav HPA u disku: hdparm -N /dev/sd?
  • Nastavit HPA u disku na hodnotu XXX: hdparm -N XXX /dev/sdx (HPA se zrusi nastavenim hodnoty XXX na max co disk umi)
    • Pokud se ma hodnota XXX zachovat permanentne i po rebootu, tak se musi uvadet s "p" jako pXXX, jde to udelat jen jednou za power-cycle.

Migrace ext3 na ext4

Minimální požadavky: kernel 2.6.30; grub 1.96+20090808; e2fsprogs 1.41.6; mount 2.16

  • umount /dev/md5
  • fsck.ext3 -ftv /dev/md5
  • tune2fs -O extents,uninit_bg,dir_index /dev/md5
  • fsck.ext4 -yfDtv /dev/md5

Podrobnosti na http://www.debian-administration.org/article/643/Migrating_a_live_system_from_ext3_to_ext4_filesystem

Migrace Windows 10 na mensi SSD

Migroval jsem uspesne 1TB HDD na 960GB SSD. Delat to z windows je nemozne (nezkousel jsem placene windows nastroje tretich stran, ale vsechny freeware nastroje i programy dodavane k SSD selhaly, primo ve windows neni nic co by to zvladlo). Na Linuxu to jde, ale je to trochu makačka. Muj postup byl nasledujici:

  • Na windows 10 v nabidce start najit CMD a "spustit jako spravce"
  • Na windows pustit chkdsk /f, nabídne to naplanovani opravy FS pri dalsim rebootu, rebootnout a zcekovat. Linux tohle neumi.
  • Kdyz je disk opravenej, muze clovek nabootovat live linux, pouzil jsem ArchBang. Ma predinstalovane vse potrebne, bezi z RAM a vejde se na flashku.
  • Pomoci cfdisku si otevru stary a novy disk. Vsechny oddily vytvorim stejne na GPT(!), ale ten nejvetsi zmensim aby se to tam vse veslo. Velikosti zadavam v sektorech, stejne jako na puvodnim disku. Pouziva se k tomu suffix "S", napr.: 123456789S. Bohuzel to neumim naskriptovat, takze jsem to delal docela rucne:
    • Nastavim stejny typ u vsech partic, zapisu a zavru cfdisk.
    • Pomoci sgdisk nastavim GUID disku (-U) i jednotlivych partici (-u) a jejich atributy (-A) tak, aby byly stejne jako na puvodnim disku. Jinak to nebude bootovat!!! Je to mravenci prace, dela se to po jednom, detaily v man sgdisk. Jake GUID ma puvodni disk jsem vycital z cfdisku.
  • Podivam se jak velka je cilova partice se systemem a resiznu zdrojovy system aby se tam s rezervou vesel. Napr.: ntfsresize –size 850G /dev/sda2. Musi tam byt volne misto aby to slo. Toto selze, pokud jsi na zacatku neudelal chkdsk /f
  • Po resiznuti znovu rebootnu do windows a znovu udelam chkdsk /f vcetne rebootu jako predtim, aby se disk opravil. pak se vratim do linuxu.
  • Pomoci dd prekopiruju obsah jednotlivych partic krome te nejvetsi systemove.
  • Nejvetsi systemovou prekopiruju pomoci ntfsclone, napr.: ntfsclone --overwrite /dev/cil /dev/zdroj. Funguje to jako dd, ale nekopiruje to bloky nealokovane fs, takze na poloprazdnem fs to usetri pulku casu. Necham bezet pres noc.
  • sync
  • Znovu rebootnu do windows a udelam chkdsk /f+reboot, vratim se do linuxu
  • Protoze jsem si nechal par GB rezervu a chci ji ziskat zpatky, tak na cilovem systemu pustim ntfsresize /dev/sdb2 na systemovy oddil, abych filesystem roztahl opet pres celou novou partici
  • Znovu rebootnu do windows a udelam chkdsk /f+reboot, windows by mely v poradku bootovat
  • Protoze oba disky maji stejna GUID, neni mozne je oba mit ve windows pripojene najednou. Puvodni disk necham 1-3 mesice, nez se zahori SSD a pak na nem prepisu GPT s novym oddilem, ten naformatuju a mam externi disk na zalohy, nebo cokoliv jineho.

Poznámky

  • Test rychlosti
    • hdparm --direct -t /dev/sd?
  • Číslo ATA portu v dmesgu - převod na device
    • ata=4; ls -l /sys/block/sd* | grep $(grep $ata /sys/class/scsi_host/host*/unique_id | awk -F'/' '{print $5}')
  • Souhrn co zapisuje na disk
    • iotop -aoP
  • Kdo pouziva mountpoint
    • fuser -mv /mnt/point
  • Záchrana dat
howto/hw/disky.txt · Poslední úprava: 2024/02/21 16:06 autor: harvie