Tips en Trucs 2017

USB Stick formatteren

USB Sticks zijn handige apparaten en iedereen gebruikt ze wel eens. Ze worden dan ook voor allerlei zaken gebruikt. Van het uitwisselen van bestanden tot het installeren van besturingssystemen. Maar na het gebruik om bijvoorbeeld een besturingssysteem te installeren, moet je ze opnieuw formatteren om er terug bestanden mee uit te kunnen wisselen.

Inleiding

Bij het inpluggen van een USB Stick in een computer, wordt dit door het besturingssysteem opgemerkt. Dit kan je met de volgende opdracht nagaan:

dany@laptop:~> dmesg
[    0.000000] microcode: CPU0 microcode updated early to revision 0x1f, date = 2016-04-01
[    0.000000] Initializing cgroup subsys cpuset
[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Initializing cgroup subsys cpuacct
[    0.000000] Linux version 4.4.49-16-default (geeko@buildhost) (gcc version 4.8.5 (SUSE Linux) ) #1 SMP Sun Feb 19 17:40:35 UTC 2017 (70e9954)
...
[ 9784.039093] usb 1-2: new high-speed USB device number 8 using xhci_hcd
[ 9784.170641] usb 1-2: New USB device found, idVendor=13fe, idProduct=3100
[ 9784.170644] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 9784.170645] usb 1-2: Product: USB DISK 2.0
[ 9784.170646] usb 1-2: Manufacturer:         
[ 9784.170647] usb 1-2: SerialNumber: 07A408027B51096B
[ 9784.179839] usb-storage 1-2:1.0: USB Mass Storage device detected
[ 9784.179906] scsi host4: usb-storage 1-2:1.0
[ 9784.180003] usbcore: registered new interface driver usb-storage
[ 9784.180939] usbcore: registered new interface driver uas
[ 9785.209085] scsi 4:0:0:0: Direct-Access              USB DISK 2.0     PMAP PQ: 0 ANSI: 0 CCS
[ 9785.209370] sd 4:0:0:0: Attached scsi generic sg1 type 0
[ 9786.644289] sd 4:0:0:0: [sdb] 7634944 512-byte logical blocks: (3.91 GB/3.64 GiB)
[ 9786.648635] sd 4:0:0:0: [sdb] Write Protect is off
[ 9786.648639] sd 4:0:0:0: [sdb] Mode Sense: 23 00 00 00
[ 9786.653022] sd 4:0:0:0: [sdb] No Caching mode page found
[ 9786.653024] sd 4:0:0:0: [sdb] Assuming drive cache: write through
[ 9786.685813]  sdb:
[ 9786.694949] sd 4:0:0:0: [sdb] Attached SCSI removable disk

Deze opdracht toont chronologisch wat er zoal op uw systeem gebeurt. Waaronder het juist inpluggen van een USB Stick. Wat ons vooral interesseert, is de naam van het apparaat waarmee ik de USB Stick kan benaderen. In bovenstaand voorbeeld is dit sdb. Als je weet dat alle apparaten in Linux in de map /dev/ verzameld worden, kan je de USB Stick bereiken via /dev/sdb.

Met de volgende opdracht kan je nagaan hoe de USB Stick geformatteerd is:

dany@laptop:~> sudo parted /dev/sdb print
root's password:
Model:  USB DISK 2.0 (scsi)
Disk /dev/sdb: 3909MB
Sector size (logical/physical): 512B/512B
Partition Table: loop
Disk Flags: 

Number  Start  End     Size    File system  Flags
 1      0,00B  3909MB  3909MB  fat32

Hieruit kan je afleiden dat de USB Stick een opslagcapaciteit van 4 GB (3909 MB) heeft en deze het bestandssysteem fat32 gebruikt. M.a.w. een doodgewone USB Stick die zo uit een winkelrek kan komen. Toch is dit niet zo gewoon, in tegenstelling tot harde schijven bevatten USB Sticks meestal geen partities (Partition Table: loop). Het bestandssysteem (hier fat32) neemt dan de volledige opslagruimte in beslag (Start: 0, End: 3909MB). Ook andere opslagmedia zoals SD kaarten en DVD's gebruiken een gelijkaardig systeem.

Formatteren

Om een USB Stick die door het systeem de naam /dev/sdb heeft gekregen, volledig met het fat32 (vfat) bestandssysteem te formatteren, gebruik je volgende opdracht (Waarschuwing: wees voorzichtig dat je niet per ongeluk uw harde schijf formatteert).

dany@laptop:~> sudo mkfs.vfat -I -n "Dany Pinoy" /dev/sdb
root's password:
mkfs.fat 3.0.26 (2014-03-07)
mkfs.fat: warning - lowercase labels might not work properly with DOS or Windows

Tijdens het formatteren, krijgt de USB Stick de naam "Dany Pinoy". Zo kunnen collega's die mijn USB Stick vinden, die ik weer eens op een computer liet zitten, mij deze snel terug bezorgen. De meeste USB Sticks gebruiken het VFAT (fat32) bestandssysteem omdat je daar geen rechten meer hoeft voor te betalen en omdat elk computersysteem het kan lezen en schrijven.

Veiliger script

De waarschuwing hierboven gaf het al aan, een kleine (typ)fout en in plaats van de USB Stick, wordt uw harde schijf geformatteerd. Het onderstaande script bouwt wat beveiligingen in, maar blijf toch voorzichtig.

#!/bin/bash

# Controleer of er twee opties werden meegegeven
if [[ -z $1 || -z $2 ]]; then
  echo 'Gebruik: bash usbformat.sh /dev/sdX "Label naam"'
  exit
fi

# Controleer of je root rechten hebt
if [[ ! $(whoami) =~ "root" ]]; then
  echo ""
  echo "************************************"
  echo "*** Uitvoeren als root gebruiker ***"
  echo "************************************"
  echo ""
  exit
fi

# Controleer of het apparaat een opslagmedia-apparaat is
if [[ ! -e $1 || ! $(file $1) =~ "block special" ]]; then
  echo "Fout: Geen opslagmedia of apparaat bestaat niet"
  exit
fi

DEVICE=$(echo "$1" | cut -d'/' -f3)
# Formatteer enkel verwisselbare apparaten
if [ $(cat /sys/block/$DEVICE/removable) == "1" ] ; then 
    # Bereken de opslagruimte van de USB Stick
    DISK_SIZE=$(parted $1 print | head -2 | tail -1 | awk '{ print $3; }')
    
    echo "Aanmaken partitietabel op $1"
    parted $1 mklabel msdos
    sync

    echo "Aanmaken partitie op $1"
    parted $1 mkpart primary fat32 0% 100%
    sync

    echo "Partitie formatteren met FAT32 en naam geven"
    mkfs.vfat -n "$2" $11
    # Gebruik enkel de volgende opdracht om zonder partities de volledige USB Stick opslagruimte te formatteren
    # sudo mkfs.vfat -I -n "SNT Stick" /dev/sdb
    sync

    echo "Overzicht:"
    parted $1 print
fi

Om de USB Stick uit het vorige voorbeeld met het script te formatteren, gebruik je de opdracht:

dany@laptop:~> sudo bash usbformat.sh /dev/sdb "Dany Pinoy"
root's password:
Aanmaken partitietabel op /dev/sdb
Warning: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? Yes                                                               
Information: You may need to update /etc/fstab.

Aanmaken partitie op /dev/sdb                                             
Information: You may need to update /etc/fstab.

Partitie formatteren met FAT32 en naam geven                              
mkfs.fat 3.0.26 (2014-03-07)
mkfs.fat: warning - lowercase labels might not work properly with DOS or Windows
Overzicht:
Model:  USB DISK 2.0 (scsi)
Disk /dev/sdb: 3909MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start   End     Size    Type     File system  Flags
 1      1049kB  3909MB  3908MB  primary  fat32        lba, type=0c

Een opmerkzame lezer merkt op dat de USB Stick hier geformatteerd wordt zoals een harde schijf, namelijk met partities. Aan u de keuze.
Apparaatmelder