💾 Archived View for berus.flounder.online › linux › ssd.gmi captured on 2023-04-19 at 22:24:45. Gemini links have been rewritten to link to archived content
⬅️ Previous capture (2022-07-16)
-=-=-=-=-=-=-
Egy kis Linux Ă©s SSD összefoglalĂł, ahogy Ă©n szoktam (tehát nem biztos, hogy Ăgy a legjobb, mindenki csak saját felelĹ‘ssĂ©gre).
Particionálás:
===
Érdemes a GParted programmal csinálni (több LiveCD-s terjesztésen
megtalálhatĂł, GParted Live, SysRescueCD, stb.) Ăgy biztosan jĂł lesz az alignálás, alapbĂłl helyesen ajánlja fel. LĂ©nyeg, hogy az elsĹ‘ partĂciĂłnak a 2048-as szektornál kell kezdĹ‘dnie!
Alignálás ellenőrzése:
blockdev --getalignoff /dev/sda
Ha jó az alignálás 0 értéket kell kapnunk.
EzenkĂvĂĽl használhatjuk a parted program align-check parancsát is.
Ne feledjük, minél több helyet hagyunk szabadon a meghajtón, a vezérlő annál jobban érzi magát!
Hogy a szabad hely particionált terület-e vagy sem, a vezérlő számára teljesen mindegy!
Fájlrendszer, TRIM, ütemező:
===
A TRIM-nek kĂ©t megvalĂłsĂtása van Linuxon, az /etc/fstab fájlba Ărt discard csatolási opciĂł, ill. az fstrim parancs.
A discard hatására az OS közli a vezérlővel, hogy az adott adat
logikailag már nem lĂ©tezik, valĂłsan törölhetĹ‘, a blokk felszabadĂthatĂł.
RĂ©gebbi meghajtĂłknál ez azonnal vĂ©grehajtĂłdik, ezĂ©rt sok kis fájl esetĂ©n teljesĂtmĂ©ny problĂ©mákat okozhat. Az Ăşjabb "queued TRIM" (SATA rev. 3.1) eljárást ismerĹ‘knĂ©l viszont a blokkok felszabadĂtása nem (feltĂ©tlen) törtĂ©nik meg azonnal, a teljesĂtmĂ©ny csökkenĂ©s veszĂ©lye kevĂ©sbĂ© áll fenn.
Discard az /etc/fstab fájlban (példák):
UUID=f0ae2c59-83d2-42e7-81c4-2e870b6b255d / ext4
discard,errors=remount-ro 0 1
/dev/sda1 / ext4 defaults,noatime,discard 0 1
Az fstrim parancs megvizsgálja a meghajtĂłt, Ă©s alapĂ©rtelmezĂ©sben az összes felszabadĂthatĂł blokkot "törli".
Tipikus formája:
fstrim -v /csatolási pont
Kiadható manuálisan, de célravezetőbb boot szkriptbe (pl.
/etc/rc.local) tenni, vagy cron feladatot létrehozni belőle, napi vagy heti futtatással.
Néhány újabb systemd-t használó terjesztésben (pl. Fedora 24) elérhetőek az "fstrim.service" és az "fstrim.timer" egységek.
Engedélyezés (alapértelmezésben hetente fut le):
systemctl enable fstrim.timer
Hogy melyiket érdemes használni a discard és az fstrim közül, azt
nagyban befolyásolják a felhasználói szokások, a kernel verziója, és a meghajtónk képességei.
Jelenleg a következő Linuxos fájlrendszerek támogatják a TRIM funkciót: EXT4, Btrfs, JFS, XFS, F2FS, Reiser4.
Bizonyos szerencsĂ©tlen összeállĂtásoknál a "queued TRIM" eljárás (tehát a discard opciĂł) problĂ©mákat okozhat!
Ennek oka a hibás eszköz firmware (pl. bizonyos Samsung meghajtók).
Kerülő megoldásként ezek a meghajtók feketelistára kerültek a
kernelben, és hagyományos, azonnal végrehajtódó TRIM parancsot kapnak. Erre érdemes lehet figyelni!
Érdemes lehet az I/O ütemezőt cfq-ról (ami figyelembe veszi a HDD
olvasĂł/ĂrĂł fej helyzetĂ©t) deadline-ra, ill. csak SSD használata esetĂ©n noop-ra állĂtani.
Jelenlegi ütemező lekérdezése (adott meghajtó):
cat /sys/block/sda/queue/scheduler
Összes meghajtó lekérdezése:
for f in /sys/block/sd?/queue/scheduler; do printf "$f -> "; cat $f;
done
Az ĂĽtemezĹ‘t legegyszerűbb az /etc/default/grub fájl megfelelĹ‘ sorának mĂłdosĂtásával állĂtani (pĂ©ldánkban deadline-ra):
GRUB_CMDLINE_LINUX_DEFAULT="elevator=deadline quiet splash"
Majd futtassuk az update-grub parancsot! A beállĂtás a következĹ‘
rendszer töltéskor lép érvénybe.
LILO használata esetén adjuk az /etc/lilo.conf fájlhoz a következő sort:
append="elevator=deadline"
Majd futtassuk a lilo parancsot.
Ha HDD is van a gĂ©pĂĽnkben, Ă©s más-más ĂĽtemezĹ‘t szeretnĂ©nk az SSD-nek Ă©s a HDD-nek, akkor a megfelelĹ‘ UDEV .rules fájlok lĂ©trehozásával beállĂthatjuk.
Hozzuk létre az /etc/udev/rules.d/60-sda_sdb.rules fájlt az alábbi tartalommal:
# set noop scheduler for non-rotating disks ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="noop" # set cfq scheduler for rotating disks ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="cfq"
Ha csak az SSD meghajtóknak akarunk udev szabályt (/etc/udev/rules.d/90-iosched.rules):
# set noop scheduler for non-rotating disks ACTION=="add|change", KERNEL=="sd[a-z]", SUBSYSTEM=="block", ATTR{queue/scheduler}="none"
Ugyanezt elĂ©rhetjĂĽk az /etc/rc.local fájl mĂłdosĂtásával is:
echo noop >/sys/block/sda/queue/scheduler
echo cfq >/sys/block/sdb/queue/scheduler
Egyéb ötletek:
===
A meghajtĂł kĂmĂ©lĂ©se Ă©s a teljesĂtmĂ©ny növelĂ©se miatt fontos lehet a noatime csatolási opciĂł beállĂtása az /etc/fstab fájlban, Ăgy nem kerĂĽl kiĂrásra az utolsĂł fájlhozzáfĂ©rĂ©s idĹ‘bĂ©lyege. HasonlĂł okokbĂłl használhatjuk a nodiratime opciĂłt is.
Ha a swap SSD-re kerül, próbáljuk csökkenteni a swap használatot a swappiness érték (alapértelmezésben 60) csökkentésével.
Ehhez Ărjuk az alábbi sort az /etc/sysctl.conf fájlba:
vm.swappiness=10
Az újabb rendszereknél:
echo "vm.swappiness=10" > /etc/sysctl.d/100-swpn.conf
Az Ă©rtĂ©ket Ă©rdemes magunknak kikĂsĂ©rletezni, akár 0-ra is állĂthatjuk.
Ha a swap az SSD-re kerĂĽl, megfontolandĂł swap partĂciĂł helyett swap fájl használata!
Swap fájl létrehozása:
fallocate -l 1024M /swapfile
vagy
dd if=/dev/zero of=/swapfile bs=1024 count=1048576
Engedélyek:
chmod 600 /swapfile
Fájlrendszer létrehozása:
mkswap /swapfile
IndĂtsuk el:
swapon /swapfile
Bejegyzés az /etc/fstab-ban:
/swapfile none swap defaults 0 0
KĂ©szen vagyunk.
A meghajtĂłn rendben van-e a TRIM:
hdparm -I /dev/sda | grep TRIM
Válaszként ezt kell látnunk: "Data Set Management TRIM supported (limit 1 block)".
Egyéb lehetőségek:
cat /sys/block/sda/queue/discard_max_bytes
Ha eredményként 0-át kapunk, nem működik a TRIM.
lsblk -D
Ahol a DISC-GRAN és DISC-MAX értéke 0, ott nem működik a TRIM.
SATA mód ellenőrzése:
smartctl -a /dev/sda | grep SATA
Válaszként ezt kell látnunk: "SATA Version is: SATA 3.0, 6.0 Gb/s
(current: 6.0 Gb/s)".
A smartctl parancs a SMARTmontools csomag része.
EzenkĂvĂĽl Ă©rdemes a /tmp könyvtárat tmpfssel (átmeneti fájlrendszer, ami sosem ĂrĂłdik lemezre) a
RAM-ba rakni (ezt néhány terjesztés alapból megteszi).
Ehhez az /etc/fstab fájlba Ărjuk a következĹ‘ sort:
tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0
Systemd-t futtatĂł rendszereknĂ©l eljárhatunk Ăgy is:
cp -v /usr/share/systemd/tmp.mount /etc/systemd/system/
systemctl enable tmp.mount
Esetleg telepĂthetjĂĽk a preload programot. Ez igyekszik megtanulni a leggyakrabban használt programokat, Ă©s elĹ‘tölti Ĺ‘ket a memĂłriába.
Példák:
===
Fstrim parancs az /etc/rc.local fájlban (Ăgy minden rendszer töltĂ©skor lefut):
#!/bin/sh -e # # rc.local # fstrim -v /csatolási pont exit 0
Ha adott csatolási ponton szeretnénk futtatni (naplózással) cron
feladatként, hozzunk létre egy fstrim nevű fájlt:
#!/bin/sh LOG=/var/log/fstrim.log echo "* $(date -R) *" >> $LOG fstrim -v /csatolási pont >> $LOG
Ha több csatolási ponton akarjuk végrehajtani (példánkban / és /home):
#!/bin/sh # Az SSD_MOUNT_POINTS változóban sorold fel a csatolási pontokat. # Elválasztónak használj szóközt. LOG=/var/log/fstrim.log SSD_MOUNT_POINTS='/ /home' for mount_point in $SSD_MOUNT_POINTS do echo "* $(date -R) *" >> $LOG fstrim -v $mount_point >> $LOG done
Tegyük a fájlt futtathatóvá és másoljuk a megfelelő /etc/cron.daily vagy /etc/cron.weekly könyvtárba.
Cron feladatkĂ©nt futĂł, ill. a systemd által meghĂvott fstrim naplĂłzása:
ElĹ‘ször is szĂĽksĂ©gĂĽnk van a syslogra, telepĂtsĂĽk Ă©s futtassuk, ha eddig nem tettĂĽk volna, majd a cron/systemd szkriptben
(/etc/cron.weekly/fstrim, ill. /usr/lib/systemd/system/fstrim.service)
szereplĹ‘ fstrim parancsot egĂ©szĂtsĂĽk ki a "-v" kapcsolĂłval.
Ezek után a syslogban (ill. bizonyos rendszereknél a
daemons/info.log-ban) ellenőrizhetjük az fstrim sikeres lefutását.
Systemd-t használó rendszereknél nincs feltétlen szükség syslogra, az alábbi paranccsal is ellenőrizhetjük a
sikeres végrehajtást:
journalctl -u fstrim
A példákban feltételezzük, hogy az SSD az első meghajtó a rendszerben, tehát a /dev/sda!
A mĂłdosĂtásokhoz root jogokkal kell rendelkeznĂĽnk!
Más-más terjesztĂ©seknĂ©l változhatnak a fentebb emlĂtett fájlok elĂ©rĂ©si Ăştjai Ă©s szintaktikái!
Irodalomként az Arch Linux idevágó wiki oldalát ajánlom!
[FrissĂtve 2022 máj.]