Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: Conky [Vyřešeno]  (Přečteno 70756 krát)

juwa2

  • Závislák
  • ***
  • Příspěvků: 4951
Re:Conky [Vyřešeno]
« Odpověď #175 kdy: 16 Června 2022, 20:21:39 »
Ne, na tomto stroji dualboot nemám. Jediný OS je Ubuntu.
Externí disky (uspávací) jsou
1. Jakási toshiba (3,5 SATA) v externím boxu Evolveo Tiny 5.
2. Externí disk WD My Book (uvnitř je 3,5 SATA WD green)
« Poslední změna: 16 Června 2022, 20:26:41 od juwa2 »

ramael

  • Stálý člen
  • **
  • Příspěvků: 850
Re:Conky [Vyřešeno]
« Odpověď #176 kdy: 16 Června 2022, 21:00:29 »
Tak něco bych tu měl:
Kód: [Vybrat]
sudo smartctl -o off /dev/sdc
A pak komplet výpis:
Kód: [Vybrat]
sudo smartctl -a /dev/sdc
A tohle by stálo asi také za přečtení:
Kód: [Vybrat]
sudo smartctl -g all /dev/sdc
Flag APM mi včera dělal divy když jsem si s tím hrál...
Lenovo: ThinkPad X380 Yoga Joutůůůůb
Codeberg  GitHub

juwa2

  • Závislák
  • ***
  • Příspěvků: 4951
Re:Conky [Vyřešeno]
« Odpověď #177 kdy: 16 Června 2022, 21:42:59 »
1. sudo smartctl -o off /dev/sdc  okamžitě pobudí disk a vypíše
Kód: [Vybrat]
=== START OF ENABLE/DISABLE COMMANDS SECTION ===
SMART Automatic Offline Testing Disabled.

2. sudo smartctl -a /dev/sdc vypíše
Kód: [Vybrat]
=== START OF INFORMATION SECTION ===
Model Family:     Toshiba P300 (CMR)
Device Model:     TOSHIBA HDWD110
Serial Number:    80HM91VFS
LU WWN Device Id: 5 000039 fdff30b92
Firmware Version: MS2OA8R0
User Capacity:    1 000 204 886 016 bytes [1,00 TB]
Sector Sizes:     512 bytes logical, 4096 bytes physical
Rotation Rate:    7200 rpm
Form Factor:      3.5 inches
Device is:        In smartctl database 7.3/5319
ATA Version is:   ATA8-ACS T13/1699-D revision 4
SATA Version is:  SATA 3.0, 6.0 Gb/s (current: 6.0 Gb/s)
Local Time is:    Thu Jun 16 21:37:25 2022 CEST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

=== START OF READ SMART DATA SECTION ===
SMART Status not supported: Incomplete response, ATA output registers missing
SMART overall-health self-assessment test result: PASSED
Warning: This result is based on an Attribute check.

General SMART Values:
Offline data collection status:  (0x04) Offline data collection activity
was suspended by an interrupting command from host.
Auto Offline Data Collection: Disabled.
Self-test execution status:      (   0) The previous self-test routine completed
without error or no self-test has ever
been run.
Total time to complete Offline
data collection: ( 7070) seconds.
Offline data collection
capabilities: (0x5b) SMART execute Offline immediate.
Auto Offline data collection on/off support.
Suspend Offline collection upon new
command.
Offline surface scan supported.
Self-test supported.
No Conveyance Self-test supported.
Selective Self-test supported.
SMART capabilities:            (0x0003) Saves SMART data before entering
power-saving mode.
Supports SMART auto save timer.
Error logging capability:        (0x01) Error logging supported.
General Purpose Logging supported.
Short self-test routine
recommended polling time: (   1) minutes.
Extended self-test routine
recommended polling time: ( 118) minutes.
SCT capabilities:        (0x003d) SCT Status supported.
SCT Error Recovery Control supported.
SCT Feature Control supported.
SCT Data Table supported.

SMART Attributes Data Structure revision number: 16
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x000b   100   100   016    Pre-fail  Always       -       0
  2 Throughput_Performance  0x0005   141   141   054    Pre-fail  Offline      -       73
  3 Spin_Up_Time            0x0007   114   114   024    Pre-fail  Always       -       200 (Average 202)
  4 Start_Stop_Count        0x0012   100   100   000    Old_age   Always       -       592
  5 Reallocated_Sector_Ct   0x0033   100   100   005    Pre-fail  Always       -       0
  7 Seek_Error_Rate         0x000b   100   100   067    Pre-fail  Always       -       0
  8 Seek_Time_Performance   0x0005   110   110   020    Pre-fail  Offline      -       36
  9 Power_On_Hours          0x0012   099   099   000    Old_age   Always       -       8670
 10 Spin_Retry_Count        0x0013   100   100   060    Pre-fail  Always       -       0
 12 Power_Cycle_Count       0x0032   100   100   000    Old_age   Always       -       70
192 Power-Off_Retract_Count 0x0032   100   100   000    Old_age   Always       -       594
193 Load_Cycle_Count        0x0012   100   100   000    Old_age   Always       -       594
194 Temperature_Celsius     0x0002   200   200   000    Old_age   Always       -       30 (Min/Max 20/43)
196 Reallocated_Event_Count 0x0032   100   100   000    Old_age   Always       -       0
197 Current_Pending_Sector  0x0022   100   100   000    Old_age   Always       -       0
198 Offline_Uncorrectable   0x0008   100   100   000    Old_age   Offline      -       0
199 UDMA_CRC_Error_Count    0x000a   200   200   000    Old_age   Always       -       6

SMART Error Log Version: 1
ATA Error Count: 6 (device log contains only the most recent five errors)
CR = Command Register [HEX]
FR = Features Register [HEX]
SC = Sector Count Register [HEX]
SN = Sector Number Register [HEX]
CL = Cylinder Low Register [HEX]
CH = Cylinder High Register [HEX]
DH = Device/Head Register [HEX]
DC = Device Command Register [HEX]
ER = Error register [HEX]
ST = Status register [HEX]
Powered_Up_Time is measured from power on, and printed as
DDd+hh:mm:SS.sss where DD=days, hh=hours, mm=minutes,
SS=sec, and sss=millisec. It "wraps" after 49.710 days.

Error 6 occurred at disk power-on lifetime: 41 hours (1 days + 17 hours)
  When the command that caused the error occurred, the device was active or idle.

  After command completion occurred, registers were:
  ER ST SC SN CL CH DH
  -- -- -- -- -- -- --
  84 51 01 f7 82 6f 0b  Error: ICRC, ABRT 1 sectors at LBA = 0x0b6f82f7 = 191857399

  Commands leading to the command that caused the error were:
  CR FR SC SN CL CH DH DC   Powered_Up_Time  Command/Feature_Name
  -- -- -- -- -- -- -- --  ----------------  --------------------
  35 00 08 f0 82 6f e0 00      01:13:59.295  WRITE DMA EXT
  35 00 08 90 82 6f e0 00      01:13:59.287  WRITE DMA EXT
  35 00 08 e8 81 6f e0 00      01:13:59.280  WRITE DMA EXT
  35 00 10 98 81 6f e0 00      01:13:59.266  WRITE DMA EXT
  35 00 08 88 81 6f e0 00      01:13:59.258  WRITE DMA EXT

Error 5 occurred at disk power-on lifetime: 41 hours (1 days + 17 hours)
  When the command that caused the error occurred, the device was active or idle.

  After command completion occurred, registers were:
  ER ST SC SN CL CH DH
  -- -- -- -- -- -- --
  84 51 21 87 28 86 03  Error: ICRC, ABRT 33 sectors at LBA = 0x03862887 = 59123847

  Commands leading to the command that caused the error were:
  CR FR SC SN CL CH DH DC   Powered_Up_Time  Command/Feature_Name
  -- -- -- -- -- -- -- --  ----------------  --------------------
  35 00 80 28 28 86 e0 00      01:13:23.704  WRITE DMA EXT
  35 00 80 a8 27 86 e0 00      01:13:23.615  WRITE DMA EXT
  35 00 80 28 27 86 e0 00      01:13:23.524  WRITE DMA EXT
  35 00 80 a8 26 86 e0 00      01:13:23.431  WRITE DMA EXT
  35 00 80 28 26 86 e0 00      01:13:23.339  WRITE DMA EXT

Error 4 occurred at disk power-on lifetime: 41 hours (1 days + 17 hours)
  When the command that caused the error occurred, the device was active or idle.

  After command completion occurred, registers were:
  ER ST SC SN CL CH DH
  -- -- -- -- -- -- --
  84 51 21 87 f9 85 03  Error: ICRC, ABRT 33 sectors at LBA = 0x0385f987 = 59111815

  Commands leading to the command that caused the error were:
  CR FR SC SN CL CH DH DC   Powered_Up_Time  Command/Feature_Name
  -- -- -- -- -- -- -- --  ----------------  --------------------
  35 00 80 28 f9 85 e0 00      01:13:14.914  WRITE DMA EXT
  35 00 80 a8 f8 85 e0 00      01:13:14.826  WRITE DMA EXT
  35 00 80 28 f8 85 e0 00      01:13:14.733  WRITE DMA EXT
  35 00 80 a8 f7 85 e0 00      01:13:14.651  WRITE DMA EXT
  35 00 80 28 f7 85 e0 00      01:13:14.558  WRITE DMA EXT

Error 3 occurred at disk power-on lifetime: 41 hours (1 days + 17 hours)
  When the command that caused the error occurred, the device was active or idle.

  After command completion occurred, registers were:
  ER ST SC SN CL CH DH
  -- -- -- -- -- -- --
  84 51 01 a7 ea 85 03  Error: ICRC, ABRT 1 sectors at LBA = 0x0385eaa7 = 59108007

  Commands leading to the command that caused the error were:
  CR FR SC SN CL CH DH DC   Powered_Up_Time  Command/Feature_Name
  -- -- -- -- -- -- -- --  ----------------  --------------------
  35 00 80 28 ea 85 e0 00      01:13:11.948  WRITE DMA EXT
  35 00 80 a8 e9 85 e0 00      01:13:11.866  WRITE DMA EXT
  35 00 80 28 e9 85 e0 00      01:13:11.785  WRITE DMA EXT
  35 00 80 a8 e8 85 e0 00      01:13:11.703  WRITE DMA EXT
  35 00 80 28 e8 85 e0 00      01:13:11.615  WRITE DMA EXT

Error 2 occurred at disk power-on lifetime: 41 hours (1 days + 17 hours)
  When the command that caused the error occurred, the device was active or idle.

  After command completion occurred, registers were:
  ER ST SC SN CL CH DH
  -- -- -- -- -- -- --
  84 51 21 07 94 85 03  Error: ICRC, ABRT 33 sectors at LBA = 0x03859407 = 59085831

  Commands leading to the command that caused the error were:
  CR FR SC SN CL CH DH DC   Powered_Up_Time  Command/Feature_Name
  -- -- -- -- -- -- -- --  ----------------  --------------------
  35 00 80 a8 93 85 e0 00      01:12:55.978  WRITE DMA EXT
  35 00 80 28 93 85 e0 00      01:12:55.884  WRITE DMA EXT
  35 00 80 a8 92 85 e0 00      01:12:55.794  WRITE DMA EXT
  35 00 80 28 92 85 e0 00      01:12:55.711  WRITE DMA EXT
  35 00 80 a8 91 85 e0 00      01:12:55.628  WRITE DMA EXT

SMART Self-test log structure revision number 1
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Short offline       Completed without error       00%         0         -

SMART Selective self-test log data structure revision number 1
 SPAN  MIN_LBA  MAX_LBA  CURRENT_TEST_STATUS
    1        0        0  Not_testing
    2        0        0  Not_testing
    3        0        0  Not_testing
    4        0        0  Not_testing
    5        0        0  Not_testing
Selective self-test flags (0x0):
  After scanning selected spans, do NOT read-scan remainder of disk.
If Selective self-test is pending on power-up, resume after 0 minute delay.

3. sudo smartctl -g all /dev/sdc   vypíše
Kód: [Vybrat]
AAM feature is:   Unavailable
APM feature is:   Disabled
Rd look-ahead is: Enabled
Write cache is:   Enabled
DSN feature is:   Unavailable
ATA Security is:  Disabled, NOT FROZEN [SEC1]

ramael

  • Stálý člen
  • **
  • Příspěvků: 850
Re:Conky [Vyřešeno]
« Odpověď #178 kdy: 16 Června 2022, 21:52:12 »
Aha. Tak si zapni APM:
Kód: [Vybrat]
sudo smartctl -s apm,128 /dev/sdc
A co to zahlásí při tom zapnutí
Lenovo: ThinkPad X380 Yoga Joutůůůůb
Codeberg  GitHub

juwa2

  • Závislák
  • ***
  • Příspěvků: 4951
Re:Conky [Vyřešeno]
« Odpověď #179 kdy: 16 Června 2022, 22:08:15 »
Kód: [Vybrat]
=== START OF ENABLE/DISABLE COMMANDS SECTION ===
APM set to level 128 (minimum power consumption without standby)

ramael

  • Stálý člen
  • **
  • Příspěvků: 850
Re:Conky [Vyřešeno]
« Odpověď #180 kdy: 16 Června 2022, 22:13:01 »
To by mělo být ono!
Tak testy:
Kód: [Vybrat]
sudo smartctl -l scttempsts -d sat /dev/sdc
sudo smartctl -s standby,now -d sat /dev/sdc
sudo smartctl -l scttempsts -d sat /dev/sdc
Ta série s třeba dvouminutovýma odstupama. A doufám, že to poslední nechá disk ve standby ležet...
Lenovo: ThinkPad X380 Yoga Joutůůůůb
Codeberg  GitHub

juwa2

  • Závislák
  • ***
  • Příspěvků: 4951
Re:Conky [Vyřešeno]
« Odpověď #181 kdy: 16 Června 2022, 22:30:35 »
První příkaz spící disk probudil.
Druhý příkaz disk uspal.
Třetí příkaz disk neprobudil, teplotu přečetl..
Kód: [Vybrat]
=== START OF READ SMART DATA SECTION ===
SCT Status Version:                  3
SCT Version (vendor specific):       256 (0x0100)
Device State:                        Stand-by (1)
Current Temperature:                    33 Celsius
Power Cycle Min/Max Temperature:     27/41 Celsius
Lifetime    Min/Max Temperature:     20/43 Celsius
Under/Over Temperature Limit Count:   0/0
« Poslední změna: 16 Června 2022, 22:38:19 od juwa2 »

ramael

  • Stálý člen
  • **
  • Příspěvků: 850
Re:Conky [Vyřešeno]
« Odpověď #182 kdy: 16 Června 2022, 22:34:21 »
Ano, třetí příkaz disk neprobudil...
Huráááá!!!
Půjdu si dát frťana!
To nastavení co jsi měl bylo na extrémní výkony, ale není moc dobré pro disk. Takhle jsem to pochopil z manuálů.
A ještě co ten ten poslední příkaz vypsal?

Ok, už to vidím.
Lenovo: ThinkPad X380 Yoga Joutůůůůb
Codeberg  GitHub

ramael

  • Stálý člen
  • **
  • Příspěvků: 850
Re:Conky [Vyřešeno]
« Odpověď #183 kdy: 16 Června 2022, 22:38:57 »
Ano, třetí příkaz disk neprobudil, teplotu přečetl..
Kód: [Vybrat]
=== START OF READ SMART DATA SECTION ===
SCT Status Version:                  3
SCT Version (vendor specific):       256 (0x0100)
Device State:                        Stand-by (1)
Current Temperature:                    33 Celsius
Power Cycle Min/Max Temperature:     27/41 Celsius
Lifetime    Min/Max Temperature:     20/43 Celsius
Under/Over Temperature Limit Count:   0/0
Teď by ti měl fungovat ten můj skript na hlídání aktivity a uspávání disků. Vyzkoušej si to až budeš mít chuť se v tom ještě/znova vrtat. Napíšu ještě pravidla pro udev ať to sám spouští kdy bude třeba. A pak ještě optimalizace skriptu co čte teploty pro conky.
Lenovo: ThinkPad X380 Yoga Joutůůůůb
Codeberg  GitHub

juwa2

  • Závislák
  • ***
  • Příspěvků: 4951
Re:Conky [Vyřešeno]
« Odpověď #184 kdy: 16 Června 2022, 22:41:48 »
To je ten tvůj první nebo druhý skript?
A pokud jsem to celé pochopil, problém byl v (SW) nastavení disku na max. výkon - pak nereagoval na příkaz "uspat"?

ramael

  • Stálý člen
  • **
  • Příspěvků: 850
Re:Conky [Vyřešeno]
« Odpověď #185 kdy: 16 Června 2022, 22:47:32 »
To je ten tvůj první nebo druhý skript?
A pokud jsem to celé pochopil, problém byl v (SW) nastavení disku na max. výkon - pak nereagoval na příkaz "uspat"?
Na "uspat" asi reagoval, ale při jakémkoliv přístupu, se aktivoval na maximum.

Tenhle je to. přednastavil jsem to na 10minut. Ale jde to měnit parametry.
Kód: [Vybrat]
#! /usr/bin/env bash

# *******************************************************
# skript má za úkol sledovat aktivitu na disku
# od poslední aktivity po nastaveném čase přepne disk
# do standby módu. Skript vyžaduje buď hdparm nebo smartctl
# smartctl (i starší verze) je rozumnější řešení. Lepší je skript
# spouštět s root právy. Nebo mít v .sudoers nastaveno bezheslové
# spouštění smartctl nebo hdparm
# zatím se skript spouští růčo:
# disk_handle.sh sdb &
# kde sdb je disk který chcete tímto způsobem "kontrolovat"
# pokud je někdo zvědavý ať si na konci skriptu odkomentuje
# tento řádek:
# echo $nespi
# mezi hvězdičkovými řádky
# pak se skript spustí bez posledního znaku &
# disk_handle.sh sdb
# alternativní spuštění: 
# disk_handle.sh sdb 900
# kde 900 je čas v sekundách za jak dlouho se má disk přepnout
#********************************************************

# #######################################################
# #######################################################
# Tady se dají vcelku bezproblémově nastavit různé
# parametry:


# po jaké době se má uspat disk v sekundách
m_sleep='600'

# rychlost hlavního loopu v sekundách
# čím vyšší číslo tím více šetříme CPU
# na úkor rychlosti odezvy
m_loop='2'

# defaultní treshold
treshold='2'

# #######################################################
# #######################################################
# a odtud už jen s velkou opatrností

NAS_READ='0'

# magické hodnoty mag_x a mag_y
# inspirace u autora conky na "doštelování" tresholdu
# podle vzorce treshold = treshold * mag_x + mag_y
mag_x='1'
mag_y='0'
# vzorec bude až za zpracováním argumentů

# později je třeba načítat z databáze !!!!
# typ='sat'

# #######################################################
# argumenty a jejich pořadí
# první bude disk!
# doba na uspání disku v sekundách
# jak rychlý má být loop
# treshold

# načtem název disku z prvního argumentu
m_disk=$1

# test jestli existuje soubor rotational
# pokud neexistuje, máme špatně zadaný disk nebo neexistuje
# když existuje jeho obsah předáme do proměnné rotation
# v opačném případě se skript ukončí s nenulovou návratovou hodnotou
rotation=$(cat /sys/block/$m_disk/queue/rotational) || exit 1

# pokud má předchozí výsledek hodnotu 0 disk by měl
# být bezplotnový a ukončíme to protože bezplotnové
# disky se neuspávají
# Zde se může vyskytnout problém. Třeba jedna prehistorická
# USB klíčenka (512MB = to bylo tenkrát dělo :D ) je registrována v
# systému jako plotnový disk. Nicméně smartctl ji nedokáže zpracovat
# a končí chybou
[[ $rotation -ne 0 ]] || exit 0

# pro hlavní funkci potřebujem smartctl nebo hdparm
# vytvoříme si vlastní konstrukt příkazu na uspávání
# teoreticky by smartctl měl v tomto případě fungovat bez
# určení typu - to se bude muset odzkoušet
uspavadlo=$( ((which smartctl) && echo ' -s standby,now ') || ((which hdparm) && echo ' -y ') ) || exit 1
kontrola_stavu=$( ((which smartctl) && echo ' -l scttempsts') || (( which hdparm) && echo ' -C') ) || exit 1

# přiřazení argumentů. Pokud nejsou zadány nastavíme je do defaultu
m_sleep=${2-$m_sleep}
m_loop=${3-$m_loop}
treshold=${4-$treshold}

# magika doštelování
# to tu není třeba
# treshold=$(( $treshold * $mag_x + $mag_y ))

# #######################################################
# zde budou funkce

## pomocná funkce na výpisy
hlaska () {
  cat <<LOG_HLASKA
  -----------------------------------------------
  teplota: $TEPLOTA°C
  stand: $STANDBY
  tre: $treshold
  poč * $pocatecni_cas
  akt * $(date +%s)
LOG_HLASKA
}


# #######################################################

# předregistrace časového razítka aby se disk neposlal hned spát
pocatecni_cas=$(date +%s)

# místo `true` dáme dvojtečku, ušetříme tím strojový čas
while :;do

  # načtem hodnotu read
  # jasně nejpomalejší:
  # TR=$(cat /sys/block/$m_disk/stat | awk {'print $1'})
  # time sed -n 's/ *//;s/ .*//p' /sys/block/sda/stat
  # je pomalejší a o drtek náročnější než toto:
  TR=$(awk {'print $1'} /sys/block/$m_disk/stat) || exit 0

# později proměnnou zakomentovat nebo vymazat
  nespi='Disk je ve standby módu'
# *************************

  # test jestli disk spí
  if [ "$STANDBY" ]; then
    # disk nespííí
# později proměnnou zakomentovat nebo vymazat
    nespi='Disk je aktivní'
# *************************

    if [ $(( $TR - $NAS_READ )) -gt $treshold ]; then
      # pokud jsme mimo treshold nastavujem časové razítko
# později proměnnou zakomentovat nebo vymazat
      nespi='startuji časové razítko od teď za $m_sleep sekund se přejde \
      do standby módu pokud se disk nebude používat'
# *************************
      pocatecni_cas=$(date +%s)
    else
      # jsme v rámci tresholdu
      # porovnáme časové razítko s aktuálním časem
      # if [ $(( $pocatecni_cas + $m_sleep )) -lt $(date +%s) ]; then
        # počátek s námi udaným časem aktivity je menší než aktuální čas
        # je čas jít spinkat
        # sudo smartctl -s standby,now -d $typ /dev/$m_disk
        # echo 'jdu spát'
        # sudo $uspavadlo /dev/$m_disk
        [ $(( $pocatecni_cas + $m_sleep )) -lt $(date +%s) ] && sudo $uspavadlo /dev/$m_disk
      # fi
    fi
  fi

  # Tohle vlastně není nutné! To by neměla být práce tohoto scriptu
  # načtem informace ze S.M.A.R.T.u disku
  # SMART=$(sudo smartctl -l scttempsts -d $typ /dev/$m_disk)
  # STANDBY=$(echo "$SMART" | grep -i 'device state' | cut -d '(' -f 2)
  # Tohle se mi nedaří lépe napsat aniž by to přestalo fungovat ;(
  STANDBY=`sudo $kontrola_stavu /dev/$m_disk | grep -i 'active'`

  # uložíme si starou hodnotu na pozdější porovnání
  NAS_READ=$TR
  # výpis stavů různých proměnných
  # hlaska

# ***********************************************************************
# Pro zvědavce odkomentovat na sledování průběhu:
# echo $nespi
# ***********************************************************************

# reset proměnných
# STANDBY
sleep $m_loop
done
Lenovo: ThinkPad X380 Yoga Joutůůůůb
Codeberg  GitHub

juwa2

  • Závislák
  • ***
  • Příspěvků: 4951
Re:Conky [Vyřešeno]
« Odpověď #186 kdy: 16 Června 2022, 22:57:26 »
Skript 1 teď (správně) běží furt pryč, nicméně časy poč a akt jsou stejné - tím pádem není splněna podmínka ve skriptu a disk se neuspí....
Skript 2 od počátku hlásí, že disk spí, ale není to pravda...
« Poslední změna: 16 Června 2022, 23:02:44 od juwa2 »

ramael

  • Stálý člen
  • **
  • Příspěvků: 850
Re:Conky [Vyřešeno]
« Odpověď #187 kdy: 16 Června 2022, 23:12:00 »
Skript 1 teď (správně) běží furt pryč, nicméně časy poč a akt jsou stejné - tím pádem není splněna podmínka ve skriptu a disk se neuspí....
Skript 2 od počátku hlásí, že disk spí, ale není to pravda...
Nevím který druhý myslíš. Avšak pokud jsou časy stejné, tak je problém v tresholdu. Je moc nízký. U mě dělá ty zmiňované 2. Na ženy PC je to čistá nula. Ještě sem postnu jeden skript na měření tresholdu.
Nejspíš zítra to přesunu na github, ať se to tu nezasírá fragmenty kódů a budem si psát jménama skriptů.
« Poslední změna: 16 Června 2022, 23:14:01 od ramael »
Lenovo: ThinkPad X380 Yoga Joutůůůůb
Codeberg  GitHub

ramael

  • Stálý člen
  • **
  • Příspěvků: 850
Re:Conky [Vyřešeno]
« Odpověď #188 kdy: 16 Června 2022, 23:17:28 »
Kód: [Vybrat]
#! /usr/bin/env bash                                                                                               
                                                                                                                   
# $$ - vlastní pid                                                                                                 
ktery_disk="sdc"                                                                                                   
pocet_cyklu=10                                                                                                     
cyklu=$pocet_cyklu                                                                                                 
sekund_sleep_loop=1                                                                                                 
                                                                                                                   
                                                                                                                   
# načtem kolik proběhlo operací read před našim testem                                                             
poc_sektoru=`cat /sys/block/$ktery_disk/stat | awk {'print $1'}`                                                   
                                                                                                                   
# smyčka o zadaném počtu cyklů                                                                                     
while [ "$pocet_cyklu" -gt 0 ]; do                                                                                 
                                                                                                                   
  # načtem teplotu z disku                                                                                         
  TEPLOTA=`sudo smartctl -l scttempsts --json=g -d sat /dev/$ktery_disk | grep 'json.temperature.current' | cut -d '
=' -f 2`                                                                                                           
                                                                                                                   
  # vypisem teplotu                                                                                                 
  echo ${TEPLOTA//';'/'°C'}                                                                                         
                                                                                                                   
  # počkáme si ať nežerem procesorový čas                                                                           
  sleep $sekund_sleep_loop                                                                                         
                                                                                                                   
  # dekrementace cyklu                                                                                             
  pocet_cyklu=$(( $pocet_cyklu - 1 ))                                                                               
done
# kolik readů po testu                                                                                             
kon_sektoru=`cat /sys/block/$ktery_disk/stat | awk {'print $1'}`                                                   
                                                                                                                   
# rozdíl v počtu readů                                                                                             
                                                                                                                   
rozdil=$(( $kon_sektoru - $poc_sektoru ))                                                                           
echo "start sektoru: $poc_sektoru | end sektoru: $kon_sektoru | rozdíl: $rozdil"                                   
echo "Jeden read = $(( $rozdil / $cyklu ))"       
Když nic nebude přistupovat k disku a bude spát, spusť si to. Mělo by to ukázat Tvůj treshold.

Se to nenakopírovalo celé. Už jsem to zkompletoval
« Poslední změna: 16 Června 2022, 23:19:35 od ramael »
Lenovo: ThinkPad X380 Yoga Joutůůůůb
Codeberg  GitHub

juwa2

  • Závislák
  • ***
  • Příspěvků: 4951
Re:Conky [Vyřešeno]
« Odpověď #189 kdy: 16 Června 2022, 23:51:24 »
Kód: [Vybrat]
juwa@p-5738:~$ ./disk_handle3.sh
cut: oddělovač musí být jediný znak
Více informací získáte příkazem „cut --help“.

cut: oddělovač musí být jediný znak
Více informací získáte příkazem „cut --help“.

cut: oddělovač musí být jediný znak
Více informací získáte příkazem „cut --help“.

cut: oddělovač musí být jediný znak
Více informací získáte příkazem „cut --help“.

cut: oddělovač musí být jediný znak
Více informací získáte příkazem „cut --help“.

cut: oddělovač musí být jediný znak
Více informací získáte příkazem „cut --help“.

cut: oddělovač musí být jediný znak
Více informací získáte příkazem „cut --help“.

cut: oddělovač musí být jediný znak
Více informací získáte příkazem „cut --help“.

cut: oddělovač musí být jediný znak
Více informací získáte příkazem „cut --help“.

cut: oddělovač musí být jediný znak
Více informací získáte příkazem „cut --help“.

start sektoru: 570 | end sektoru: 570 | rozdíl: 0
Jeden read = 0

ramael

  • Stálý člen
  • **
  • Příspěvků: 850
Re:Conky [Vyřešeno]
« Odpověď #190 kdy: 16 Června 2022, 23:56:39 »
Kód: [Vybrat]
juwa@p-5738:~$ ./disk_handle3.sh
cut: oddělovač musí být jediný znak
Více informací získáte příkazem „cut --help“.

cut: oddělovač musí být jediný znak
Více informací získáte příkazem „cut --help“.

cut: oddělovač musí být jediný znak
Více informací získáte příkazem „cut --help“.

cut: oddělovač musí být jediný znak
Více informací získáte příkazem „cut --help“.

cut: oddělovač musí být jediný znak
Více informací získáte příkazem „cut --help“.

cut: oddělovač musí být jediný znak
Více informací získáte příkazem „cut --help“.

cut: oddělovač musí být jediný znak
Více informací získáte příkazem „cut --help“.

cut: oddělovač musí být jediný znak
Více informací získáte příkazem „cut --help“.

cut: oddělovač musí být jediný znak
Více informací získáte příkazem „cut --help“.

cut: oddělovač musí být jediný znak
Více informací získáte příkazem „cut --help“.

start sektoru: 570 | end sektoru: 570 | rozdíl: 0
Jeden read = 0

To má být jeden řádek:
Kód: [Vybrat]
TEPLOTA=`sudo smartctl -l scttempsts --json=g -d sat /dev/$ktery_disk | grep 'json.temperature.current' | cut -d '=' -f 2`
Někde se to špatně přeneslo. Nejspíš u mne.

EDIT:
Pro jistotu ještě jednou výpisem catu:
Kód: [Vybrat]
#! /usr/bin/env bash

# $$ - vlastní pid
ktery_disk="sda"
pocet_cyklu=10
cyklu=$pocet_cyklu
sekund_sleep_loop=1


# načtem kolik proběhlo operací read před našim testem
poc_sektoru=`cat /sys/block/$ktery_disk/stat | awk {'print $1'}`

# smyčka o zadaném počtu cyklů
while [ "$pocet_cyklu" -gt 0 ]; do

  # načtem teplotu z disku
  TEPLOTA=`sudo smartctl -l scttempsts --json=g -d sat /dev/$ktery_disk | grep 'json.temperature.current' | cut -d '=' -f 2`

  # vypisem teplotu
  echo ${TEPLOTA//';'/'°C'}
 
  # počkáme si ať nežerem procesorový čas
  sleep $sekund_sleep_loop

  # dekrementace cyklu
  pocet_cyklu=$(( $pocet_cyklu - 1 ))
done

# kolik readů po testu
kon_sektoru=`cat /sys/block/$ktery_disk/stat | awk {'print $1'}`

# rozdíl v počtu readů

rozdil=$(( $kon_sektoru - $poc_sektoru ))
echo "start sektoru: $poc_sektoru | end sektoru: $kon_sektoru | rozdíl: $rozdil"
echo "Jeden read = $(( $rozdil / $cyklu ))"
Jsem to sem pro jistotu ještě jednou přenesl. Chyba byla na mé straně.
« Poslední změna: 17 Června 2022, 00:01:53 od ramael »
Lenovo: ThinkPad X380 Yoga Joutůůůůb
Codeberg  GitHub

juwa2

  • Závislák
  • ***
  • Příspěvků: 4951
Re:Conky [Vyřešeno]
« Odpověď #191 kdy: 17 Června 2022, 00:19:15 »
Spící disk to probudilo:
Kód: [Vybrat]
juwa@p-5738:~$ ./disk_handle3.sh
34°C
34°C
34°C
34°C
34°C
34°C
34°C
34°C
34°C
34°C
start sektoru: 771 | end sektoru: 771 | rozdíl: 0
Jeden read = 0
« Poslední změna: 17 Června 2022, 00:21:10 od juwa2 »

ramael

  • Stálý člen
  • **
  • Příspěvků: 850
Re:Conky [Vyřešeno]
« Odpověď #192 kdy: 17 Června 2022, 00:35:49 »
Spící disk to probudilo:
Kód: [Vybrat]
juwa@p-5738:~$ ./disk_handle3.sh
34°C
34°C
34°C
34°C
34°C
34°C
34°C
34°C
34°C
34°C
start sektoru: 771 | end sektoru: 771 | rozdíl: 0
Jeden read = 0
To je v pořádku. Takže ty čísla byla stejná, protože tě něco přistupovalo k disku. Něco z něho četlo. Jinak si to nedovedu vysvětlit (zatím).
Už ten problém vidím. Zítra to budu muset otestovat.
Lenovo: ThinkPad X380 Yoga Joutůůůůb
Codeberg  GitHub

PepanB

  • Návštěvník
  • Příspěvků: 72
Re:Conky [Vyřešeno]
« Odpověď #193 kdy: 17 Června 2022, 09:02:10 »
ramael:
chtěl bych se zeptat kde hledat chybu. Nevím jestli v smartctl nebo v konfiguraci conky. Chtěl jsem přidat i teplotu druhého USB disku. Stejný box a podobný disk tentokrát wd blue.
Když do conky přidám tyto dva řádky:
Kód: [Vybrat]
${color}sdc:  ${execi 60 smartctl -A /dev/sdc | egrep Temperature_Celsius | awk '{print $10}'
${color}sdd:  ${execi 60 smartctl -A /dev/sdd | egrep Temperature_Celsius | awk '{print $10}'
tak se zobrazí jenom jedna teplota. V tomto případě teplota sdc. Když sdc zakomentuji zobrazí se správně teplota sdd, ale nikdy obě najednou. Zkusil jsem hddtemp a tam se zobrazí obě teploty správně.

ramael

  • Stálý člen
  • **
  • Příspěvků: 850
Re:Conky [Vyřešeno]
« Odpověď #194 kdy: 17 Června 2022, 09:42:25 »
ramael:
chtěl bych se zeptat kde hledat chybu. Nevím jestli v smartctl nebo v konfiguraci conky. Chtěl jsem přidat i teplotu druhého USB disku. Stejný box a podobný disk tentokrát wd blue.
Když do conky přidám tyto dva řádky:
Kód: [Vybrat]
${color}sdc:  ${execi 60 smartctl -A /dev/sdc | egrep Temperature_Celsius | awk '{print $10}'
${color}sdd:  ${execi 60 smartctl -A /dev/sdd | egrep Temperature_Celsius | awk '{print $10}'
tak se zobrazí jenom jedna teplota. V tomto případě teplota sdc. Když sdc zakomentuji zobrazí se správně teplota sdd, ale nikdy obě najednou. Zkusil jsem hddtemp a tam se zobrazí obě teploty správně.
Myslím, že ti chybí ukončovací závorky:
Kód: [Vybrat]
${color}sdc:  ${execi 60 smartctl -A /dev/sdc | egrep Temperature_Celsius | awk '{print $10}'}
${color}sdd:  ${execi 60 smartctl -A /dev/sdd | egrep Temperature_Celsius | awk '{print $10}'}
Můžeš to zkrátit:
Kód: [Vybrat]
${color}sdc:  ${execi 60 smartctl -A /dev/sdc | awk '/Temperature_Celsius/{print $10}'}
${color}sdd:  ${execi 60 smartctl -A /dev/sdd | awk '/Temperature_Celsius/{print $10}'}
Lenovo: ThinkPad X380 Yoga Joutůůůůb
Codeberg  GitHub

PepanB

  • Návštěvník
  • Příspěvků: 72
Re:Conky [Vyřešeno]
« Odpověď #195 kdy: 17 Června 2022, 11:08:13 »
ramael:
chtěl bych se zeptat kde hledat chybu. Nevím jestli v smartctl nebo v konfiguraci conky. Chtěl jsem přidat i teplotu druhého USB disku. Stejný box a podobný disk tentokrát wd blue.
Když do conky přidám tyto dva řádky:
Kód: [Vybrat]
${color}sdc:  ${execi 60 smartctl -A /dev/sdc | egrep Temperature_Celsius | awk '{print $10}'
${color}sdd:  ${execi 60 smartctl -A /dev/sdd | egrep Temperature_Celsius | awk '{print $10}'
tak se zobrazí jenom jedna teplota. V tomto případě teplota sdc. Když sdc zakomentuji zobrazí se správně teplota sdd, ale nikdy obě najednou. Zkusil jsem hddtemp a tam se zobrazí obě teploty správně.
Myslím, že ti chybí ukončovací závorky:
Kód: [Vybrat]
${color}sdc:  ${execi 60 smartctl -A /dev/sdc | egrep Temperature_Celsius | awk '{print $10}'}
${color}sdd:  ${execi 60 smartctl -A /dev/sdd | egrep Temperature_Celsius | awk '{print $10}'}
Můžeš to zkrátit:
Kód: [Vybrat]
${color}sdc:  ${execi 60 smartctl -A /dev/sdc | awk '/Temperature_Celsius/{print $10}'}
${color}sdd:  ${execi 60 smartctl -A /dev/sdd | awk '/Temperature_Celsius/{print $10}'}
Mooc dík, opravdu to bylo ukončovacími zavorkami. Slibuju že již nebudu otravovat. S Conky jsem zcela spokojený a určitě budou mít využití v nadcházejících vedrech

ramael

  • Stálý člen
  • **
  • Příspěvků: 850
Re:Conky [Vyřešeno]
« Odpověď #196 kdy: 17 Června 2022, 13:13:17 »
Skript na uspávání disků
Tak jsem trochu zeštíhlil skript a přidal automatickou kontrolu typu disku. Postnul jsem to na github ať se to tu neplevelí:
https://github.com/RadekRojik/conkys/blob/main/disk_handle.sh
Skript nemá v základním nastavení nic vypisovat! Spouští se buď s root právy nebo musíte mít nastaveno v .sudoers a .bashrc bezheslový smartctl. Skript po spuštění probudí disk kvůli kontrole typu disku. Pokud bude disk bezplotnový, skript se sám ukončí. Kdo si chce testovat funkčnost musí v něm odkomentovat dva označené řádky skoro na konci, aby viděl výstupy.
Včera/vlastně dnes nad ránem jsem zjistil, že namoutovaný disk malinko zvedá treshold oproti jen fyzicky připojenému (což je vlastně logické). Každý program na čtení informací o tom disku (zatížení, jak je plný, atd) zvyšuje hodnotu čtení nad treshold. Proto si v klidu pohrajte s třetím argumentem když vám neběží ostatní diskové operace (muzika, kopírování, filmy, atd). Čtení informací o disku je doporučeno. Takže když vám toto:
Kód: [Vybrat]
sudo disk_handle.sh sdb 120 2
po dvou minutách neuspí disk při splnění podmínek výše napsaných. Zkuste si to malinko zvednout:
Kód: [Vybrat]
sudo disk_handle.sh sdb 120 3
Atd. Jen pro zajímavost, spuštěný film z disku mi zvedl treshold na 6.
Připomínky a podněty samozřejmě vítány.

P.S. tento skript je malou částí celku aby se nejen v conky dali načítat teploty s minimální režií a zároveň se neudržovali disky stále roztočené. Je to takové drbání se levou rukou za pravým uchem, ale lepší řešení jsem zatím nenašel a nevymyslel.
Lenovo: ThinkPad X380 Yoga Joutůůůůb
Codeberg  GitHub

juwa2

  • Závislák
  • ***
  • Příspěvků: 4951
Re:Conky [Vyřešeno]
« Odpověď #197 kdy: 17 Června 2022, 13:41:46 »
Kód: [Vybrat]
juwa@p-5738:~$ ./disk_handle4.sh sdc 120 2
awk: cmd. line:1: warning: escape sequence `\;' treated as plain `;'
  -----------------------------------------------
  stand: Device State:                        Active (0)
  treshold: 2
  počáteční čas: 1655465878
  aktuální čas 1655465878
Disk je ve standby módu
  -----------------------------------------------
  stand: Device State:                        Active (0)
  treshold: 2
  počáteční čas: 1655465878
  aktuální čas 1655465880
Disk je aktivní
  -----------------------------------------------
  stand: Device State:                        Active (0)
  treshold: 2
  počáteční čas: 1655465878
  aktuální čas 1655465882
Disk je aktivní

Před spuštěním skriptu disk běžel, běží stále, po 2 min. se neuspí....
EDIT_1: Po 10 min. přešel do standby (toho svého interního), skript "jede" dál, vypisuje hodnoty.
EDIT_2: Skript ukončen a spuštěn znovu (disk ve standby). Skript píše "Disk je aktivní" ale není to pravda....
EDIT_3: Teď se ale sám rozběhl a běží, skript vypisuje hodnoty....
« Poslední změna: 17 Června 2022, 13:52:48 od juwa2 »

ramael

  • Stálý člen
  • **
  • Příspěvků: 850
Re:Conky [Vyřešeno]
« Odpověď #198 kdy: 17 Června 2022, 13:56:01 »
Kód: [Vybrat]
juwa@p-5738:~$ ./disk_handle4.sh sdc 120 2
awk: cmd. line:1: warning: escape sequence `\;' treated as plain `;'
  -----------------------------------------------
  stand: Device State:                        Active (0)
  treshold: 2
  počáteční čas: 1655465878
  aktuální čas 1655465878
Disk je ve standby módu
  -----------------------------------------------
  stand: Device State:                        Active (0)
  treshold: 2
  počáteční čas: 1655465878
  aktuální čas 1655465880
Disk je aktivní
  -----------------------------------------------
  stand: Device State:                        Active (0)
  treshold: 2
  počáteční čas: 1655465878
  aktuální čas 1655465882
Disk je aktivní

Před spuštěním skriptu disk běžel, běží stále, po 2 min. se neuspí....
EDIT_1: Po 10 min. přešel do standby (toho svého interního), skript "jede" dál, vypisuje hodnoty.
EDIT_2: Skript ukončen a spuštěn znovu (disk ve standby). Skript píše "Disk je aktivní" ale není to pravda....
EDIT_3: Teď se ale sám rozběhl a běží, skript vypisuje hodnoty....

Nechápu co se mu nelíbí:
Citace
awk: cmd. line:1: warning: escape sequence `\;' treated as plain `;'

Když přidáš na 101. řádek
Kód: [Vybrat]
echo "*typ: $TYPE"
Copak to bude vypisovat?
Lenovo: ThinkPad X380 Yoga Joutůůůůb
Codeberg  GitHub

juwa2

  • Závislák
  • ***
  • Příspěvků: 4951
Re:Conky [Vyřešeno]
« Odpověď #199 kdy: 17 Června 2022, 14:04:04 »
Ten výpis je pořád stejný... Teď píše "Disk je aktivní" a přitom disk spí....
Kód: [Vybrat]
Device placed in STANDBY mode
  -----------------------------------------------
  stand: Device State:                        Active (0)
  treshold: 2
  počáteční čas: 1655467394
  aktuální čas 1655467592
Disk je aktivní
smartctl 7.3 2022-02-28 r5338 [x86_64-linux-5.4.199-0504199-lowlatency] (local build)
Copyright (C) 2002-22, Bruce Allen, Christian Franke, www.smartmontools.org

Device placed in STANDBY mode
  -----------------------------------------------
  stand: Device State:                        Active (0)
  treshold: 2
  počáteční čas: 1655467394
  aktuální čas 1655467595
Disk je aktivní


Teď jsem ho probudil, ve výpisu se nic nezměnilo (vypisuje stále to stejné)...
« Poslední změna: 17 Června 2022, 14:10:00 od juwa2 »

 

Provoz zaštiťuje spolek OpenAlt.