EXT4 Festplatte am Raspberry Pi mounten und formatieren
Aus znilwiki
Nach dem ich feststellen musste das eine USB-Festplatte mit NTFS-Dateisystem eine erbärliche Schreibperfomance hat wollte ich den Gegentest mit EXT4 machen - hier nun wie es geht.
Festplatte anschliessen und finden
Steckt die Platte an den USB-Anschluss eures Raspberry Pi ... und dann?
Und dann müssen wir diese suchen ...
Festplatte finden über lshw -C disk
Befehl:
lshw -C disk
Ausgabe:
*-disk:0 description: SCSI Disk physical id: 0.0.0 bus info: scsi@2:0.0.0 logical name: /dev/sda size: 32GiB (34GB) capabilities: partitioned partitioned:dos configuration: sectorsize=512 signature=00028135 *-disk:1 description: SCSI Disk physical id: 0.1.0 bus info: scsi@2:0.1.0 logical name: /dev/sdb size: 200GiB (214GB) capabilities: partitioned partitioned:dos configuration: sectorsize=512 signature=6da8bd46 *-cdrom description: DVD-RAM writer physical id: 0.0.0 bus info: scsi@1:0.0.0 logical name: /dev/cdrom logical name: /dev/sr0 capabilities: audio cd-r cd-rw dvd dvd-r dvd-ram configuration: status=open
Festplatte finden über /var/log/messages
macht ein
cat /var/log/messages
und ihr erhaltet etwas wie das hier:
Dec 1 20:40:15 piap kernel: [ 3.771767] usb 1-1.2.3: new high-speed USB device number 5 using dwc_otg Dec 1 20:40:15 piap kernel: [ 3.933914] usb 1-1.2.3: New USB device found, idVendor=174c, idProduct=5106 Dec 1 20:40:15 piap kernel: [ 3.945461] usb 1-1.2.3: New USB device strings: Mfr=2, Product=3, SerialNumber=1 Dec 1 20:40:15 piap kernel: [ 3.955812] usb 1-1.2.3: Product: AS2105 Dec 1 20:40:15 piap kernel: [ 3.963266] usb 1-1.2.3: Manufacturer: ASMedia Dec 1 20:40:15 piap kernel: [ 3.970432] usb 1-1.2.3: SerialNumber: S1WFJ9EB132942 Dec 1 20:40:15 piap kernel: [ 4.001559] scsi0 : usb-storage 1-1.2.3:1.0 Dec 1 20:40:15 piap kernel: [ 5.012467] scsi 0:0:0:0: Direct-Access SAMSUNG HM500JI 2AC1 PQ: 0 ANSI: 5 Dec 1 20:40:15 piap kernel: [ 5.039962] sd 0:0:0:0: [sda] 976773168 512-byte logical blocks: (500 GB/465 GiB) Dec 1 20:40:15 piap kernel: [ 5.057344] sd 0:0:0:0: [sda] Write Protect is off Dec 1 20:40:15 piap kernel: [ 5.567049] sda: sda1 Dec 1 20:40:15 piap kernel: [ 5.616699] sd 0:0:0:0: [sda] Attached SCSI disk
Wir sehen meine "Samsung HM500JI" Festplatte - und in der Fett gedruckten Zeile lesen wir 'sda1' - das ist Angabe die wir suchen!
Festplatte finden über dmesg
Einfach den Befehl
dmesg
eingeben, da kommt im Prinzip das gleiche wie zuvor:
[ 4.001559] scsi0 : usb-storage 1-1.2.3:1.0 [ 5.012467] scsi 0:0:0:0: Direct-Access SAMSUNG HM500JI 2AC1 PQ: 0 ANSI: 5 [ 5.039962] sd 0:0:0:0: [sda] 976773168 512-byte logical blocks: (500 GB/465 GiB) [ 5.057344] sd 0:0:0:0: [sda] Write Protect is off [ 5.071617] sd 0:0:0:0: [sda] Mode Sense: 23 00 00 00 [ 5.072605] sd 0:0:0:0: [sda] No Caching mode page present [ 5.080839] sd 0:0:0:0: [sda] Assuming drive cache: write through [ 5.110083] sd 0:0:0:0: [sda] No Caching mode page present [ 5.131514] sd 0:0:0:0: [sda] Assuming drive cache: write through [ 5.567049] sda: sda1 [ 5.582282] sd 0:0:0:0: [sda] No Caching mode page present [ 5.590557] sd 0:0:0:0: [sda] Assuming drive cache: write through [ 5.616699] sd 0:0:0:0: [sda] Attached SCSI disk [ 5.634986] Registered led device: led0
Festplatte finden über /dev/
Einfach ein
ls -l /dev/sd*
gibt eine Ausgabe wie diese:
brw-rw---T 1 root floppy 8, 0 Jan 1 1970 /dev/sda brw-rw---T 1 root floppy 8, 1 Jan 1 1970 /dev/sda1
Die erste können wir Ignorieren, die letzte ist es!
/dev/sda1
habt sondern nur /dev/sba
so gibt es noch gar keine Partition auf der Festplatte. Dann müsst Ihr zuvor eine erstellen - siehe nächsten Abschnitt
Partition erstellen
/dev/sda1
sondern nur /dev/sda
Wir tippen ein:
fdisk /dev/sda
Da kommt dann vil Text und die Aufforderung
Command (m for help):
Wir drücken
n
um eine neue Partition zu erstellen und dann
p
für eine Primäre Partition, dann
1
für die erste Partition.
Dann drückt 2x Enter um die vorgeschlagenen Werte zu übernehmen.
Jetzt sollte da wieder
Command (m for help):
stehen und wir drücken
w
um das ganze auf die Platte zu schreiben.
Das sollte also etwas so aussehen:
root@pi7 ~ # fdisk /dev/sda Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel Building a new DOS disklabel with disk identifier 0xb24e7835. Changes will remain in memory only, until you decide to write them. After that, of course, the previous content won't be recoverable. Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite) The device presents a logical sector size that is smaller than the physical sector size. Aligning to a physical sector (or optimal I/O) size boundary is recommended, or performance may be impacted. Command (m for help): n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p Partition number (1-4, default 1): 1 First sector (2048-3907029167, default 2048): Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-3907029167, default 3907029167): Using default value 3907029167 Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks.
Festplatte mit EXT4 Dateisystem formatieren
Wenn Ihr die Festplatte formatieren wollt:
- Erst formatieren
- Dann mounten!
- Sonst vorher unmounten (siehe letzten Abschnitt)
Formatieren ist auch ganz einfach:
mkfs.ext4 /dev/sda1
Ausgabe sollte wie folgt sein:
mke2fs 1.42.5 (29-Jul-2012) Dateisystem-Label= OS-Typ: Linux Blockgröße=4096 (log=2) Fragmentgröße=4096 (log=2) Stride=0 Blöcke, Stripebreite=0 Blöcke 30531584 Inodes, 122095872 Blöcke 6104793 Blöcke (5.00%) reserviert für den Superuser Erster Datenblock=0 Maximale Dateisystem-Blöcke=0 3727 Blockgruppen 32768 Blöcke pro Gruppe, 32768 Fragmente pro Gruppe 8192 Inodes pro Gruppe Superblock-Sicherungskopien gespeichert in den Blöcken: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 102400000 Platz für Gruppentabellen wird angefordert: erledigt Inode-Tabellen werden geschrieben: erledigt Erstelle Journal (32768 Blöcke): erledigt Schreibe Superblöcke und Dateisystem-Accountinginformationen: erledigt
Festplatte mounten
Mounten ist der englische Begriff dafür die Festplatte einzubinden (ich übersetze das mal mit 'to mount' = 'etwas montieren')
Wir wissen das die Platte in diesem Fall sda1
heisst.
Zuvor brauchen wir jedoch einen Ort = Verzeichnis welches dann für düe Festplatte steht.
Typische Ort dafür sind
/mnt/... /media/...
'mnt' ist dabei eher für "interne" Medien gedacht, 'media' eher für externe - na gut, nehmen wir 'media' und erstellen uns ein neues Verzeichnis
mkdir /media/Samsung500
Den Namen könnt Ihr völlig frei wählen.
In diese neue, leere (!!!) Verzeichnis mounten wir nun die Festplatte:
mount /dev/sda1 /media/Samsung500/
Mounten überprüfen
Ob das geklappt habt können wir auf mehrere Arten testen:
mtab
cat /etc/mtab
ergibt eine Liste an (wahrscheinlich) deren Ende unsere neuer Platte steht:
rootfs / rootfs rw 0 0 /dev/root / ext4 rw,noatime,data=ordered 0 0 devtmpfs /dev devtmpfs rw,relatime,size=240492k,nr_inodes=60123,mode=755 0 0 tmpfs /run tmpfs rw,nosuid,noexec,relatime,size=49752k,mode=755 0 0 tmpfs /run/lock tmpfs rw,nosuid,nodev,noexec,relatime,size=5120k 0 0 proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0 sysfs /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0 tmpfs /run/shm tmpfs rw,nosuid,nodev,noexec,relatime,size=99500k 0 0 devpts /dev/pts devpts rw,nosuid,noexec,relatime,gid=5,mode=620 0 0 /dev/mmcblk0p5 /boot vfat rw,relatime,fmask=0022,dmask=0022,codepage=cp437,iocharset=ascii,shortname=mixed,errors=remount-ro 0 0 fusectl /sys/fs/fuse/connections fusectl rw,relatime 0 0 /dev/sda1 /media/Samsung500 fuseblk rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other,blksize=4096 0 0
df -l
oder wie schauen uns die Datenträger an: (-l steht für "nur lokale Dateisysteme", -h für "Lesbar für Menschen" - dann nimmt der MByte und Gigybyte)
df -l -h
Dateisystem Größe Benutzt Verf. Verw% Eingehängt auf rootfs 15G 4,0G 10G 29% / /dev/root 15G 4,0G 10G 29% / devtmpfs 438M 0 438M 0% /dev tmpfs 88M 260K 88M 1% /run tmpfs 5,0M 0 5,0M 0% /run/lock tmpfs 175M 0 175M 0% /run/shm /dev/mmcblk0p1 56M 16M 41M 28% /boot /dev/sda1 917G 108G 763G 13% /media/Samsung500 none 438M 0 438M 0% /sys/fs/cgroup
Kleiner Benchmark der Leistung?
Nur aus Spaß - mal eben testen wie schnell die Festplatte denn ist.
Zuerst ins Verzeichnis der Festplatte:
cd /media/WDMyPassport/
Und dann der Benchmark den ich auch für den Test der SD-Karten einsetze (Gemäß http://elinux.org/RPi_SD_cards#Terminal_Commands, nur angepasst)
sync; time dd if=/dev/zero of=./test.tmp bs=500K count=1024; time sync dd if=./test.tmp of=/dev/null bs=500K count=1024 rm ./test.tmp
Bei mir ergab das folgendes:
1024+0 Datensätze ein 1024+0 Datensätze aus 524288000 Bytes (524 MB) kopiert, 19,3391 s, 27,1 MB/s real 0m19.396s user 0m0.020s sys 0m9.510s real 0m0.678s user 0m0.010s sys 0m0.000s root@piap /media/Samsung500 # dd if=./test.tmp of=/dev/null bs=500K count=1024 1024+0 Datensätze ein 1024+0 Datensätze aus 524288000 Bytes (524 MB) kopiert, 22,3363 s, 23,5 MB/s
Damit ist die Schreibrate schon mal erheblich besser als die Festplatte mit NTFS (die hatte nur 3,9 MB/s geschafft)
Unmounten der Festplatte
Tja, hat ja alles gut geklappt - und nun wieder ab damit:
umount /dev/sda1
prüfen können wir das wieder mit dem
df -l -h
da sollte der letzte Eintrag dann wieder fehlen.
Kommt da ein
umount: /media/WDMyPassport: device is busy. (In some cases useful info about processes that use the device is found by lsof(8) or fuser(1))
dann geht z.B. mit
cd /
vorher wieder aus dem Verzeichnis raus - bzw. irgendeins hat irgendetwas noch auf der Platte offen oder greift darauf zu
Automatisch beim Booten mounten
So, klappt alles - aber leider ist die Platte nach dem nächsten Reboot nicht mehr da. Wer diese dauerhaft mounten will hat verschiedene Möglichkeiten - die hier vorgestellte ist nur eine davon.
Die Methode hier hat das die Platte X auch immer zu Verzeichnis Y gemountet wird, auch wenn diese mal an einem anderen Port hängt oder mal nicht die sda1 sondern die sda2 ist.
UUID herausbekommen
Wir geben folgenden Befehl ein:
ls -l /dev/disk/by-uuid/
und erhalten eine Ausgabe wie diese:
lrwxrwxrwx 1 root root 15 Jan 1 1970 03A0-BE2D -> ../../mmcblk0p5 lrwxrwxrwx 1 root root 15 Jan 1 1970 1ae5432c-b5bf-41fe-aff5-e8453cdf08d3 -> ../../mmcblk0p3 lrwxrwxrwx 1 root root 15 Dez 15 22:51 5e37cae6-21bb-45a0-b40d-fbb17b5db0d2 -> ../../mmcblk0p6 lrwxrwxrwx 1 root root 15 Jan 1 1970 9016-4EF8 -> ../../mmcblk0p1 lrwxrwxrwx 1 root root 10 Dez 15 22:51 efd48c69-3780-44f2-8262-1f54c1a4aae6 -> ../../sda1
Der letzte Eintrag mit dem sda1
am Ende - das ist unser. Die UUID ist der Wert in der Mitte - hier also efd48c69-3780-44f2-8262-1f54c1a4aae6
Festplatte in fstab eintragen
Erst eine Kopie der sensiblen Datei:
cp /etc/fstab /etc/fstab.backup
und dann bearbeiten
nano /etc/fstab
Für die obige Festplatte würden wir folgende Zeile hinzufügen:
UUID=efd48c69-3780-44f2-8262-1f54c1a4aae6 /media/usbdisk ext4 defaults 0 0
Die Werte bedeuten:
UUID=efd48c69-3780-44f2-8262-1f54c1a4aae6 : Die UUID des Datenträgers /media/usbdisk : Das Verzeichnis in das gemountet werden soll ext4 : Welches Dateisystem soll gemountet werden, ggf. auch mit auto probieren defaults : Mit Standardeinstellungen / Rechten mounten, Detail siehe z.B. hier: https://wiki.archlinux.de/title/Fstab 0 : Für den Befehl Dump, 0 bedeutet "keine Systempartition" 0 : Für Dateisystemprüfung, 0 bedeutet "ohne Prüfung" einbinden
Als Test einen kleinen Reboot - danach sollte die Platte weiterhin/wieder eingehängt sein.