diskdebug

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                       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      497M   0% /lib/init/rw
 +/dev/sdb1              78G   38G   37G  51% /home
 +/dev/sdc1             963M   44M  919M   5% /media/8C3A-3BB0
 +</code>