Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Obě strany předchozí revize Předchozí verze
diskdebug [2012/07/19 20:43]
Ubuntu
diskdebug [2019/02/25 18:21] (aktuální)
Řádek 1: Řádek 1:
 +====== DiskDebug ======
  
 +**DiskDebug** - skript, který za vás vyhledá informace při problémech s disky - interními, externími, flash paměti, mp3 přehrávače apod.
 +
 +{{.:​media-flash.png}} {{.:​removable-media.png}} {{.:​ipod.png}} {{.:​cellphone.png}}
 +{{.:​disk.png}}
 +
 +Skript se spouští přes //gksudo//, a výsledný soubor **výsledky.txt** se zkopíruje do fóra. Pro podrobnější návod se podívejte na [[Řešení problémů:​Jak dodat informace do fóra]].
 +
 +====== Text skriptu ke zkopírování ======
 +<​code>​
 +#! /bin/bash
 +
 +Devkit(){
 +which udisks &> /dev/null || { echo "​$RANDOM - udisks není v systému";​ return; }
 +for i in /​dev/​[sh]d[a-z]*;​ do
 +        udisks --show-info $i
 +done
 +}
 +
 +if [[ `whoami` != "​root"​ ]]; then
 +        zenity --info --title="​DiskDebug"​ --text="​Musíš být root!\nSpouštěj skript přes gksudo."​
 +        exit 1
 +fi
 +
 +##### zde je možné přidávat příkazy ######
 +DiskPrikazy=( "​foo"​ "​dmesg"​ "​lsusb"​ "fdisk -l" "​parted -l" "​mount"​ "blkid -c /​dev/​null"​ "ls -l /​media"​ "​Devkit"​ )
 +SystemPrikazy=( "​foo"​ "uname -a" "cat /​etc/​lsb-release"​ "free -m" "df -Th" )
 +##########################################​
 +
 +TempSoubor=`mktemp`
 +
 +# adresář, z kterého spouštíme skript
 +AktAdresar=$(cd $(dirname "​$0"​);​pwd)
 +# existuje AktAdresar?
 +# pokud ne, přepokládej $HOME nebo /tmp
 +[[ -z $AktAdresar ]] && AktAdresar="​$HOME"​
 +[[ -z $AktAdresar ]] && AktAdresar=/​tmp
 +
 +PocetDiskPrikazu=$((${#​DiskPrikazy[@]} - 1))
 +PocetSystemPrikazu=$((${#​SystemPrikazy[@]} - 1))
 +CelkemPrikazu=$(($PocetDiskPrikazu * 2 + $PocetSystemPrikazu + 15))
 +
 +zenity --info --title="​DiskDebug"​ --text="​Krok č.1/​2:​\n\nOdpoj zařízení pomocí \"​Odpojit\"​ (pokud je vidět ikona).\n Potom ho vysuň fyzicky z počítače,​ nebo ho vypni.\n\nAž bude odpojené, nebo pokud již bylo odpojené, klikni OK."
 +# progress bar
 +# pokud klikne uživatel Cancel, nestačí to dát do proměnné - je to v souboru $TempSoubor
 +# ten se pak testuje v průběhu skriptu a la '[[ -s $TempSoubor ]] && exit 1'
 +exec 3> >(zenity --progress --title="​DiskDebug"​ --percentage=0 --auto-close --width=300 || echo cancel > $TempSoubor)
 +
 +j=1
 +for i in $(seq 1 $PocetDiskPrikazu);​ do
 +                prikaz=${DiskPrikazy[$i]}
 +                echo $(($j * 100 / $CelkemPrikazu)) >&3
 +                echo "# ${j}/​${CelkemPrikazu} - ${prikaz}"​ >&3
 +                $prikaz &> /tmp/$i.txt
 +                [[ -s $TempSoubor ]] && exit 1
 +                ((j++))
 +                sleep 0.2
 +done
 +
 +zenity --info --title="​DiskDebug"​ --text="​Krok č.2/​2:​\n\nZnovu připoj nebo zapni zařízení.\n\nAž bude připojené,​ klikni OK."
 +for i in {1..14}; do
 +                echo $(($j * 100 / $CelkemPrikazu)) >&3
 +                echo "# ${j}/​${CelkemPrikazu} - Sbírám data..."​ >&3
 +                [[ -s $TempSoubor ]] && exit 1
 +                ((j++))
 +                sleep 1
 +done
 +
 +exec &> "​$AktAdresar/​výsledky.txt"​
 +
 +for i in $(seq 1 $PocetDiskPrikazu);​ do
 +        echo $(($j * 100 / $CelkemPrikazu)) >&3
 +        prikaz=${DiskPrikazy[$i]}
 +        echo "# ${j}/​${CelkemPrikazu} - ${prikaz}"​ >&3
 +        echo
 +        echo $prikaz
 +        echo ---------------------------
 +        $prikaz | diff -wB - /tmp/$i.txt
 +        [[ -s $TempSoubor ]] && exit 1
 +        ((j++))
 +        sleep 0.2
 +done
 +
 +for i in $(seq 1 $PocetSystemPrikazu);​ do
 +        echo $(($j * 100 / $CelkemPrikazu)) >&3
 +        prikaz=${SystemPrikazy[$i]}
 +        echo "# ${j}/​${CelkemPrikazu} - ${prikaz}"​ >&3
 +        echo
 +        echo $prikaz
 +        echo ---------------------------
 +        $prikaz
 +        [[ -s $TempSoubor ]] && exit 1
 +        ((j++))
 +        sleep 0.2
 +done
 +
 +if zenity --question --title="​DiskDebug"​ --text="​Hotovo.\n\nByl vytvořen soubor $AktAdresar/​výsledky.txt.\n\nChceš ho rovnou otevřít?";​ then
 +        editor="​gnome-text-editor"​
 +        which "​$editor"​ &> /dev/null || editor=gedit
 +        $editor "​$AktAdresar/​výsledky.txt"​ &
 +fi
 +
 +exit 0
 +</​code>​
 +
 +====== Technické detaily (není nutné znát) ======
 +
 +Základem skriptu je vytvoření výpisu příkazů uvedených v proměnné //​DiskPrikazy//​ před a po připojení zařízení. Tyto výpisy se pak porovnávají pomocí příkazu //diff//, takže výsledkem jsou zprávy týkající se pouze přidaného zařízení.
 +
 +Příkaz //zenity// pouze zobrazuje okénka s instrukcemi.
 +
 +K výpisu jsou ještě připojeny obecné systémové příkazy (proměnná //​SystemPrikazy//​),​ které vypíší informace o systému a jeho kondici.
 +
 +{{.:​example.png}} Příklad možného obsahu souboru //​výsledky.txt//​ (připojen flash disk 1GB, souborový systém FAT, identifikační číslo 3538:0054, připojen na /​media/​8C3A-3BB0,​ bez větších chyb, zaplněn z 5%):
 +<​code>​
 +dmesg
 +---------------------------
 +669,689d668
 +< [ 2682.300043] end_request:​ I/O error, dev fd0, sector 0
 +< [ 2682.328027] end_request:​ I/O error, dev fd0, sector 0
 +< [ 2690.316035] usb 1-4: new high speed USB device using ehci_hcd and address 3
 +< [ 2690.451331] usb 1-4: configuration #1 chosen from 1 choice
 +< [ 2690.505460] Initializing USB Mass Storage driver...
 +< [ 2690.505622] scsi4 : SCSI emulation for USB Mass Storage devices
 +< [ 2690.505925] usbcore: registered new interface driver usb-storage
 +< [ 2690.505931] USB Mass Storage support registered.
 +< [ 2690.506919] usb-storage:​ device found at 3
 +< [ 2690.506924] usb-storage:​ waiting for device to settle before scanning
 +< [ 2695.504188] usb-storage:​ device scan complete
 +< [ 2695.505299] scsi 4:0:0:0: Direct-Access ​    ​Generic ​ USB Flash Disk   0.00 PQ: 0 ANSI: 2
 +< [ 2695.505888] sd 4:0:0:0: Attached scsi generic sg3 type 0
 +< [ 2695.522417] sd 4:0:0:0: [sdc] 1974271 512-byte logical blocks: (1.01 GB/963 MiB)
 +< [ 2695.523390] sd 4:0:0:0: [sdc] Write Protect is off
 +< [ 2695.523394] sd 4:0:0:0: [sdc] Mode Sense: 00 00 00 00
 +< [ 2695.523397] sd 4:0:0:0: [sdc] Assuming drive cache: write through
 +< [ 2695.528271] sd 4:0:0:0: [sdc] Assuming drive cache: write through
 +< [ 2695.528280] ​ sdc: sdc1
 +< [ 2695.696238] sd 4:0:0:0: [sdc] Assuming drive cache: write through
 +< [ 2695.696248] sd 4:0:0:0: [sdc] Attached SCSI removable disk
 +
 +lsusb
 +---------------------------
 +2d1
 +< Bus 001 Device 003: ID 3538:0054 Power Quotient International Co., Ltd Flash Drive (2GB)
 +
 +fdisk -l
 +---------------------------
 +29,38d28
 +<
 +< Disk /dev/sdc: 1010 MB, 1010826752 bytes
 +< 255 heads, 63 sectors/​track,​ 122 cylinders
 +< Units = cylinders of 16065 * 512 = 8225280 bytes
 +< Disk identifier: 0x91f72d24
 +<
 +<    Device Boot      Start         ​End ​     Blocks ​  ​Id ​ System
 +< /​dev/​sdc1 ​              ​1 ​        ​123 ​     987104 ​   b  W95 FAT32
 +< Partition 1 has different physical/​logical endings:
 +<      phys=(121, 254, 63) logical=(122,​ 227, 40)
 +
 +parted -l
 +---------------------------
 +29,37d28
 +< Model: Generic USB Flash Disk (scsi)
 +< Disk /dev/sdc: 1011MB
 +< Sector size (logical/​physical):​ 512B/512B
 +< Partition Table: msdos
 +<
 +< Number ​ Start   ​End ​    ​Size ​   Type     File system ​ Flags
 +<  1      32.3kB ​ 1011MB ​ 1011MB ​ primary ​ fat32
 +<
 +<
 +
 +mount
 +---------------------------
 +15d14
 +< /dev/sdc1 on /​media/​8C3A-3BB0 type vfat (rw,​nosuid,​nodev,​uhelper=devkit,​uid=1000,​gid=1000,​shortname=mixed,​dmask=0077,​utf8=1,​flush)
 +
 +blkid -c /dev/null
 +---------------------------
 +11d10
 +< /dev/sdc1: LABEL=""​ UUID="​8C3A-3BB0"​ TYPE="​vfat"​
 +
 +uname -a
 +---------------------------
 +Linux lean 2.6.31-17-generic #54-Ubuntu SMP Thu Dec 10 16:20:31 UTC 2009 i686 GNU/Linux
 +
 +cat /​etc/​lsb-release
 +---------------------------
 +DISTRIB_ID=Ubuntu
 +DISTRIB_RELEASE=9.10
 +DISTRIB_CODENAME=karmic
 +DISTRIB_DESCRIPTION="​Ubuntu 9.10"
 +
 +free -m
 +---------------------------
 +             ​total ​      ​used ​      ​free ​    ​shared ​   buffers ​    ​cached
 +Mem:           ​993 ​       637        356          0         ​39 ​       325
 +-/+ buffers/​cache: ​       272        720
 +Swap:         ​1051 ​         0       1051
 +
 +df -h
 +---------------------------
 +Filesystem ​           Size  Used Avail Use% Mounted on
 +/​dev/​sda8 ​             15G  3.7G   ​10G ​ 28% /
 +udev                  497M  288K  497M   1% /dev
 +none                  497M  140K  497M   1% /dev/shm
 +none                  497M   ​72K ​ 497M   1% /var/run
 +none                  497M  8.0K  497M   1% /var/lock
 +none                  497M     ​0 ​ 497M   0% /​lib/​init/​rw
 +/​dev/​sdb1 ​             78G   ​38G ​  ​37G ​ 51% /home
 +/​dev/​sdc1 ​            ​963M ​  ​44M ​ 919M   5% /​media/​8C3A-3BB0
 +</​code>​