Aktionen

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.



1 Festplatte anschliessen und finden

Steckt die Platte an den USB-Anschluss eures Raspberry Pi ... und dann?
Und dann müssen wir diese suchen ...


1.1 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




1.2 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!



1.3 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




1.4 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!

Important.png
Hinweis: Wenn Ihr kein /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




2 Partition erstellen

Warning.png
Warnung: Das müsst Ihr nur machen falls Ihr noch keine Partition habt, also kein /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.




3 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




4 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/




5 Mounten überprüfen

Ob das geklappt habt können wir auf mehrere Arten testen:



5.1 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




5.2 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




6 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)


7 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



8 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.



8.1 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



8.2 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.




Jonnylossus

71 Monaten zuvor
Punktzahl 0++

Hey! Ich habe das Problem, dass die HDD als "read only" eingebunden wird. :/ Ich habe es jetzt mit Hilfe von einem Bekannten geschafft, dass ich im Ordner Schreibrechte habe. Allerdings wird die Festplatte dauernd gedismounted und ich kann auch per Samba nicht drauf.

NTFS funktioniert, hat aber erbärmliche Schreibraten. :/

Was soll ich tun?

Liebe Grüße

BLinz

71 Monaten zuvor
Punktzahl 0++

Das mit den erbärmlichen Schreibraten kann ich nur bestätigen - nutze statt dessen halt EXT4 als Dateisystem. Für Windows gibt es Treiber die das lesen können.

Probleme mit einer Platte (dauernder Dismount etc.) hatte ich auch schon ... es gibt nun leider Hardware / Festplatten die am RasPi nicht funktionieren. Von 3 externen Festplatten funktionierten bei mir zu Hause nur 2.

Ergo: nimm andere Hardware / ein anderes Festplattengehäuse

BLinz

71 Monaten zuvor
Punktzahl 0++
ah, eben erst gesehen das dies ja der EXT4 Artikel ist ... nun dann bleibt das Problem mit der Hardware

MG

46 Monaten zuvor
Punktzahl 0++

Falls mal jemand darüber stolpert, dass mit EXT4 soeben formatierte (USB-)Disks für seeeehr lange Zeit aktiv bleiben:

Die "lazy initialization" kann nach dem ersten Mounten einiges an Daten auf die Festplatte schreiben. Der Kernel-Prozess "ext4lazyinit" schreibt zu Beginn bis zu 16000kB/s auf das Device und verursacht somit einiges an Bandbreite zur Festplatte (s.a. Per Prozess I/O Statistiken). Um die Lazy Initialization zu verhindern werden beim Befehl mkfs.ext4 erweiterte Optionen angegeben:

mkfs.ext4 -E lazy_itable_init=0,lazy_journal_init=0 /dev/sda1

Mit der Angabe dieser Optionen werden die Inodes sowie das Journal direkt beim Erstellen initialisiert.

Gefunden bei: https://www.…_Dateisystem

thomas

31 Monaten zuvor
Punktzahl 0++
Bin darüber gestolpert. Herzlichen Dank dafür.

Joshua Macken

21 Monaten zuvor
Punktzahl 0++
Wirklich sehr gut beschrieben, Danke!

Martin Gipmans

20 Monaten zuvor
Punktzahl 0++

Danke für deine gute Anleitung! Konnte man Festplatte nach deiner Beschreibung schnell einbinden.

Gruß

Martin

newbi

15 Monaten zuvor
Punktzahl 0++
vielen dank hat sehr geholfen
Kommentar hinzufügen
znilwiki freut sich über alle Kommentare. Sofern du nicht anonym bleiben möchtest, trage deinen Namen oder deine Email-Adresse ein oder melde dich an. Du kannst das Feld auch einfach leer lassen. Bei einem Kommentar wird deine IP-Adresse zusammen mit dem Text, den angegebenen Namen bzw. der Email-Adresse in der Datenbank für die Kommentare dauerhaft gespeichert. Genaueres kannst du hier nachlesen: Datenschutzerklärung