====== FreeBSD - Festplatten ======
siehe auch:
* [[::Festplatten]]
* [[::Festplatten partitionieren]]
* [[::Freebsd:FreeBSD - Festplatten]]
* [[::FreeBSD:ZFS]]
* [[::FreeBSD:ZFS#Boot-Pool]]
* [[::Festplatten partitionieren#zusätzliches Laufwerk für FreeBSD 12 einrichten]]
* [[::Festplatten partitionieren#Boot-Laufwerk für FreeBSD 12 partitionieren]]
Seit FreeBSD 6.3 wurde das menügeführte Plattenpartitionsprogramm __''sade''__ //(sysadmins disk editor)// eingeführt.
**ACHTUNG:**
Mit FreeBSD 9.0 wurde ''sysinstall'' entfernt und als Ersatz wurde in FreeBSD 9.0 __''bsdinstall''__ eingeführt.
> sysctl kern.disks
kern.disks: ada8 ada9 ada4 ada5 ada0 ada1 cd0 ada7 ada3 ada6 ada2 nda0
> camcontrol devlist
at scbus0 target 0 lun 0 (pass0,ada0)
at scbus1 target 0 lun 0 (pass1,ada1)
at scbus2 target 0 lun 0 (pass2,ada2)
at scbus3 target 0 lun 0 (pass3,ada3)
at scbus6 target 0 lun 0 (ses0,pass4)
at scbus8 target 0 lun 0 (pass5,ada4)
at scbus11 target 0 lun 0 (pass6,ada5)
at scbus13 target 0 lun 0 (pass7,ada6)
at scbus15 target 0 lun 0 (sg0,pass8,cd0)
at scbus16 target 0 lun 0 (pass9,ada7)
at scbus17 target 0 lun 0 (pass10,ada8)
at scbus18 target 0 lun 0 (pass11,ada9)
at scbus19 target 0 lun 1 (pass12,nda0)
===== Disk Device Codes =====
* [[http://www.freebsd.org/doc/en/books/handbook/disk-organization.html#BASICS-DEV-CODES]]
^ Code ^ Bezeichnung ^
| ad | ATAPI (IDE) disk / SATA |
| da | SCSI direct access disk |
| acd | ATAPI (IDE) CDROM |
| cd | SCSI CDROM |
| fd | Floppy disk |
===== USB-Stick =====
siehe auch: [[::Dateisystem-Images#Image auf einen USB-Stick schreiben]]
> dmesg
...
usb_msc_auto_quirk: UQ_MSC_NO_GETMAXLUN set for USB mass storage device SanDisk SanDisk 3.2 Gen1 (0x0781:0x55b1)
usb_msc_auto_quirk: UQ_MSC_NO_PREVENT_ALLOW set for USB mass storage device SanDisk SanDisk 3.2 Gen1 (0x0781:0x55b1)
ugen0.4: at usbus0
umass0 on uhub0
umass0: on usbus0
umass0: SCSI over Bulk-Only; quirks = 0x8100
umass0:20:0: Attached to scbus20
da0 at umass-sim0 bus 0 scbus20 target 0 lun 0
da0: Removable Direct Access SPC-4 SCSI device
da0: Serial Number A2003B84B6F17838
da0: 400.000MB/s transfers
da0: 238728MB (488914944 512 byte sectors)
da0: quirks=0x2
> glabel status
Name Status Components
...
diskid/DISK-A200888888888888 N/A da0
> ls -lha /dev/da0*
crw-r----- 1 root operator 0xf1 Feb 24 14:18 /dev/da0
crw-r----- 1 root operator 0xf3 Feb 24 14:49 /dev/da0s1
> mount -t msdosfs /dev/da0s1 /mnt/
mount_msdosfs: /dev/da0s1: Invalid argument
> gpart show da0
=> 63 488914881 da0 MBR (233G)
63 7489 - free - (3.7M)
7552 488907392 1 ntfs (233G)
> pkg info sysutils/fusefs-ntfs
> mount -t ntfs-3g /dev/da0s1 /mnt/
mount: /dev/da0s1: Invalid fstype: Invalid argument
//[[https://supportportal.juniper.net/s/article/Junos-How-to-mount-a-USB-drive-on-EX-SRX-MX-QFX-Series-platforms-to-import-export-files?language=en_US|Use another USB device with the FAT16 or FAT32 format. Newer USB 3.0 devices with large capacity use the exFAT format, and might not support the FAT32 format. Try using USB 2.0 devices with smaller capacity.]] - Diese Fehler treten auf, wenn das USB-Laufwerk zu grß ist; FreeBSD unterstützt nur die kleineren USB2.0-Laufwerke.//
===== Festplatten im System ermitteln =====
Normalerweise verwendet man unter Linux für diese Aufgabe das Kommando ''fdisk -l'',
in FreeBSD kennt "fdisk" den Parameter "-l" nicht.
==== GEOM-Namen ====
braucht man die Übersetzung von __GEOM-Namen__ zu __Gerätenamen__, dann kann das ''glabel''
> glabel list
> glabel status
diskid/DISK-7JJK1DBC N/A ada0
diskid/DISK-ZA28ER52 N/A ada1
diskid/DISK-1SHNABYZ N/A ada2
diskid/DISK-7JJKANEC N/A ada3
diskid/DISK-WD-WMC6M0H02SPU N/A ada4
diskid/DISK-WD-WXB1HB4H9AHF N/A ada5
diskid/DISK-WD-WMC6N0H1T7LJ N/A ada6
diskid/DISK-WD-WX21D7453SY1 N/A ada7
==== sysctl ====
alle Festplatten, die der Kernel kennt:
> sysctl kern.disks
kern.disks: ada8 ada7 ada6 ada5 ada4 ada3 ada2 ada1 ada0 cd0
==== dmesg ====
alle Festplatten, die beim Boot-Vorgang gefunden wurden:
# dmesg | egrep '^ad|^da|^cd'
acd0: DVDROM at ata0-slave UDMA33
ad4: 239372MB at ata2-master SATA150
ad6: 239372MB at ata3-master SATA150
oder
# dmesg | egrep ' at | Serial Number' | fgrep -B1 'Serial Number'
ada0 at ahcich0 bus 0 scbus0 target 0 lun 0
ada0: Serial Number WD-WCAW31974189
ada1 at ahcich1 bus 0 scbus1 target 0 lun 0
ada1: Serial Number PL2331LA1G908J
ada2 at ahcich9 bus 0 scbus9 target 0 lun 0
ada2: Serial Number WD-WCAZA1451286
ada3 at ahcich10 bus 0 scbus10 target 0 lun 0
ada3: Serial Number WD-WCC131401387
ada4 at ahcich11 bus 0 scbus11 target 0 lun 0
ada4: Serial Number PL1331LA1G7G8H
ada5 at ahcich13 bus 0 scbus13 target 0 lun 0
ada5: Serial Number WD-WCAW31095888
ada6 at ahcich14 bus 0 scbus14 target 0 lun 0
ada6: Serial Number WD-WCC131651187
ada7 at ahcich15 bus 0 scbus15 target 0 lun 0
ada7: Serial Number WD-WX21D1453S81
ada8 at siisch2 bus 0 scbus20 target 0 lun 0
ada8: Serial Number WD-WCAZA1478182
ada9 at siisch3 bus 0 scbus21 target 0 lun 0
ada9: Serial Number WD-WX31D147KC8Z
pass2 at ahcich7 bus 0 scbus7 target 0 lun 0
pass2: Serial Number HKDP2211168L
bei zuviel Ausgaben in den //system message buffer// hilft dieser kleine Umweg;
hier werden die ''dmesg''-Meldungen vom letzten Boot-Vorgang in der Datei ''/var/log/dmesg.boot'' gespeichert und man kann sie immerwieder einsehen, auch wenn der Puffer schon voll ist und die ersten Meldungen bereits raus sind:
echo '/sbin/dmesg > /var/log/dmesg.boot 2>&1' >> /etc/rc.local
reboot
egrep ' at | Serial Number' /var/log/dmesg.boot | fgrep -B1 'Serial Number'
==== /dev ====
seit FreeBSD 5 (dynamisches ///dev//) geht auch ein "ls":
# ls -l /dev/ad* /dev/da* /dev/cd*
lrwxr-xr-x 1 root wheel 4 Oct 2 10:16 /dev/ad10 -> ada2
lrwxr-xr-x 1 root wheel 4 Oct 2 10:16 /dev/ad6 -> ada0
lrwxr-xr-x 1 root wheel 4 Oct 2 10:16 /dev/ad8 -> ada1
lrwxr-xr-x 1 root wheel 5 Oct 2 10:16 /dev/ad8a -> ada1a
crw-r----- 1 root operator 0, 99 Oct 2 10:16 /dev/ada0
crw-r----- 1 root operator 0, 101 Oct 2 10:16 /dev/ada1
crw-r----- 1 root operator 0, 105 Oct 2 12:16 /dev/ada1a
crw-r----- 1 root operator 0, 103 Oct 2 10:16 /dev/ada2
crw-r----- 1 root operator 0, 97 Oct 2 10:16 /dev/cd0
crw-r----- 1 root operator 0, 98 Oct 2 10:16 /dev/cd1
crw-r----- 1 root operator 0, 122 Oct 2 10:16 /dev/da0
crw-r----- 1 root operator 0, 130 Oct 2 10:16 /dev/da1
crw-r----- 1 root operator 0, 141 Oct 2 12:16 /dev/da2
crw-r----- 1 root operator 0, 144 Oct 2 12:16 /dev/da3
crw-r----- 1 root operator 0, 146 Oct 2 12:16 /dev/da4
crw-r----- 1 root operator 0, 148 Oct 2 12:16 /dev/da5
=== ext4 mounten (FreeBSD 11) ===
den Namen der Gerätedatei (hier ist es ''ada10'') ermitteln, von einer Festplatte, die frisch angesteckt wurde:
> dmesg | tail
load_dn_sched dn_sched FQ_CODEL loaded
load_dn_sched dn_sched FQ_PIE loaded
load_dn_aqm dn_aqm CODEL loaded
load_dn_aqm dn_aqm PIE loaded
ada10 at ahcich8 bus 0 scbus8 target 0 lun 0
ada10: ATA8-ACS SATA 2.x device
ada10: Serial Number WD-WMAYP4845471
ada10: 300.000MB/s transfers (SATA 2.x, UDMA6, PIO 8192bytes)
ada10: Command Queueing enabled
ada10: 239429MB (490350672 512 byte sectors)
von ''ada10'' die Partitionsnummer ermitteln:
> ls -1 /dev/ada10s*
/dev/ada10s1
von ''ada10'' den Dateisystem-Typ ermitteln:
> fdisk /dev/ada10 | fgrep sysid
sysid 131 (0x83),(Linux native)
da es sich hier um ein natives Linux-Dateisystem handelt (ext2, ext3 oder ext4), werden wir den entsprechenden Treiber installieren:
> pkg install sysutils/fusefs-ext4fuse
die erste Partition mit ext4 mounten:
> ext4fuse /dev/ada10s1 /250GB
==== ATA ====
früher:
# atacontrol list
heute:
# camcontrol devlist
==== SCSI/USB/S-ATA ====
Man kann allerdings SCSI-, USB- und SATA-Gerät auch so anzeigen:
* [[http://www.freebsd.org/doc/de/books/handbook/usb-disks.html]]
* [[http://www.freebsd.org/cgi/man.cgi?query=umass&sektion=4]]
* [[http://www.freebsd.org/cgi/man.cgi?query=camcontrol&sektion=8]]
# camcontrol devlist
at scbus0 target 0 lun 0 (pass0,cd0)
at scbus1 target 0 lun 0 (ada0,pass1)
at scbus2 target 0 lun 0 (ada1,pass2)
at scbus3 target 0 lun 0 (ada2,pass3)
at scbus4 target 0 lun 0 (pass4,cd1)
at scbus6 target 0 lun 0 (da0,pass5)
at scbus6 target 0 lun 1 (pass6,ses0)
at scbus7 target 0 lun 0 (da1,pass7)
at scbus7 target 0 lun 1 (pass8,ses1)
at scbus8 target 0 lun 0 (da2,pass9)
at scbus8 target 0 lun 1 (da3,pass10)
at scbus8 target 0 lun 2 (da4,pass11)
at scbus8 target 0 lun 3 (da5,pass12)
Gerätename vom DVD-Laufwerk finden:
> camcontrol devlist | fgrep DVD | awk '{print $NF}' | tr -s '[(,)]' '\n' | grep -Ev '^$|pass[0-9]'
cd0
cd1
Informationen zu einem Gerät anzeigen
# diskinfo -v ada0
ada0
512 # sectorsize
10000831348736 # mediasize in bytes (9.1T)
19532873728 # mediasize in sectors
4096 # stripesize
0 # stripeoffset
19377850 # Cylinders according to firmware.
16 # Heads according to firmware.
63 # Sectors according to firmware.
WDC WD101KRYZ-01JPDB1 # Disk descr.
78JKLNEC # Disk ident.
No # TRIM/UNMAP support
7200 # Rotation rate in RPM
Not_Zoned # Zone Mode
eine CD/DVD kopieren:
> dd if=/dev/cd0 of=cd.iso bs=2048
==== gpart ====
Eigentlich ist //gpart// ein Partitionswerkzeug für //GEOM//,
aber ich konnte damit auch meine SD-Carte sehen, auf die ich
sonst nicht zugreifen konnte.
# gpart show -l
# gpart show -lp
# gpart show
=> 0 62533296 ada1 BSD (29G)
0 60817408 1 freebsd-ufs (29G)
60817408 1715888 - free - (837M)
=> 63 3913665 da4 MBR (1.9G)
63 66 - free - (33k)
129 3913535 1 !6 (1.9G)
3913664 64 - free - (32k)
=> 0 3913535 da4s1 EBR (1.9G)
0 3913535 - free - (1.9G)
so sieht eine Festplatte aus, auf der FreeBSD 10 mit ZFS als root-Dateisystem installiert wurde:
> gpart show
=> 34 1953525101 ada0 GPT (932G)
34 1024 1 freebsd-boot (512K)
1058 16777216 2 freebsd-swap (8.0G)
16778274 1936746861 3 freebsd-zfs (924G)
> gpart show -r
=> 34 1953525101 ada0 GPT (932G)
34 1024 1 83bd6b9d-7f41-11dc-be0b-001560b84f0f (512K)
1058 16777216 2 516e7cb5-6ecf-11d6-8ff8-00022d09712b (8.0G)
16778274 1936746861 3 516e7cba-6ecf-11d6-8ff8-00022d09712b (924G)
> gpart list
> gpart list ada0
Geom name: ada0
modified: false
state: OK
fwheads: 16
fwsectors: 63
last: 1953525134
first: 34
entries: 128
scheme: GPT
Providers:
1. Name: ada0p1
Mediasize: 524288 (512K)
Sectorsize: 512
Stripesize: 0
Stripeoffset: 17408
Mode: r0w0e0
rawuuid: 3f4ed14d-14c4-11e4-bc13-bcaec58cba70
rawtype: 83bd6b9d-7f41-11dc-be0b-001560b84f0f
label: gptboot1
length: 524288
offset: 17408
type: freebsd-boot
index: 1
end: 1057
start: 34
2. Name: ada0p2
Mediasize: 8589934592 (8.0G)
Sectorsize: 512
Stripesize: 0
Stripeoffset: 541696
Mode: r1w1e1
rawuuid: 3f621fef-14c4-11e4-bc13-bcaec58cba70
rawtype: 516e7cb5-6ecf-11d6-8ff8-00022d09712b
label: swap1
length: 8589934592
offset: 541696
type: freebsd-swap
index: 2
end: 16778273
start: 1058
3. Name: ada0p3
Mediasize: 991614392832 (924G)
Sectorsize: 512
Stripesize: 0
Stripeoffset: 541696
Mode: r1w1e2
rawuuid: 3f737947-14c4-11e4-bc13-bcaec58cba70
rawtype: 516e7cba-6ecf-11d6-8ff8-00022d09712b
label: zfs1
length: 991614392832
offset: 8590476288
type: freebsd-zfs
index: 3
end: 1953525134
start: 16778274
Consumers:
1. Name: ada0
Mediasize: 1000204886016 (932G)
Sectorsize: 512
Mode: r2w2e5
===== Informationen einer Festplatte anzeigen =====
hier befindet sich keine SD-Karte im Slot des Card-Readers:
# bsdlabel da3
bsdlabel: unable to get correct path for da3: Device not configured
hier befindet sich eine SD-Karte im Slot des Card-Readers, auf mir leider der Zugriff verwehrt bleibt:
# bsdlabel da4
# bsdlabel -A da4
bsdlabel: /dev/da4: no valid label found
Name Status Components
gpt/gptboot1 N/A ada0p1
gptid/3f4ed14d-14c4-11e4-bc13-bcaec58cba70 N/A ada0p1
gpt/swap1 N/A ada0p2
gptid/3f737947-14c4-11e4-bc13-bcaec58cba70 N/A ada0p3
diskid/DISK-WD-WX21D7453SY1 N/A ada2
diskid/DISK-7JJKANEC N/A ada5
gpt/swap0 N/A ada3p2
gptid/3d5a4e6c-14c4-11e4-bc13-bcaec58cba70 N/A ada3p3
diskid/DISK-PL1331LAGG7GKH N/A ada6
diskid/DISK-03EF039300A9 N/A da0
ntfs/Freecom N/A da0s1
gpt/gptboot0 N/A ada3p1
gptid/3cde3f3e-14c4-11e4-bc13-bcaec58cba70 N/A ada3p1
mit ''glabel'' geht es auch prima:
> glabel status
> glabel status | fgrep -v 'Name Status Components' | awk '{print $NF"\t"$1}'
ada0p1 gpt/gptboot1
ada0p1 gptid/3f4ed14d-14c4-11e4-bc13-bcaec58cba70
ada0p2 gpt/swap1
ada0p3 gptid/3f737947-14c4-11e4-bc13-bcaec58cba70
ada2 diskid/DISK-WD-WX21D7453SY1
ada5 diskid/DISK-7JJKANEC
ada3p2 gpt/swap0
ada3p3 gptid/3d5a4e6c-14c4-11e4-bc13-bcaec58cba70
ada6 diskid/DISK-PL1331LAGG7GKH
da0 diskid/DISK-03EF039300A9
da0s1 ntfs/Freecom
ada3p1 gpt/gptboot0
ada3p1 gptid/3cde3f3e-14c4-11e4-bc13-bcaec58cba70
===== eine kompatible Partition auf einen Austauschdatenträger anlegen =====
In diesem Beispiel werde ich eine kleine (2,5") 160GB-USB-Platte partitionieren und mit FAT32 formatieren,
damit sie als Austauschdatenträger dienen kann:
> dmesg
...
da0 at umass-sim0 bus 0 scbus6 target 0 lun 0
da0: Fixed Direct Access SCSI-0 device
da0: 40.000MB/s transfers
da0: 152627MB (312581804 512 byte sectors: 255H 63S/T 19457C)
...
> dd if=/dev/zero of=/dev/da0 bs=512 count=4
> fdisk -i /dev/da0
> newfs_msdos -F 32 -L HDMediaBox /dev/da0s1
/dev/da0s1: 312500288 sectors in 4882817 FAT32 clusters (32768 bytes/cluster)
BytesPerSec=512 SecPerClust=64 ResSectors=32 FATs=2 Media=0xf0 SecPerTrack=63 Heads=255 HiddenSecs=0 HugeSectors=312576642 FATsecs=38148 RootCluster=2 FSInfo=1 Backup=2
> mount -t msdosfs -o large /dev/da0s1 /mnt/
> df -h /mnt/
Filesystem Size Used Avail Capacity Mounted on
/dev/da0s1 149G 96k 149G 0% /mnt
===== Status aller Festplatten anzeigen =====
#!/usr/bin/env bash
VERSION="v2016010500"
SKRIPTNAME="$(basename ${0})"
SKRIPTVERZEICHNIS="$(dirname ${0})"
#------------------------------------------------------------------------------#
### pkg install smartmontools-6.2_2
### echo 'smartd_enable="YES"' >> /etc/rc.conf
#------------------------------------------------------------------------------#
if [ "$(id -u)" != "0" ] ; then
echo "Sie muessen root sein!"
exit 1
fi
#------------------------------------------------------------------------------#
if [ "$(uname -o)" == "FreeBSD" ] ; then
### FreeBSD
SMARTOPT="-a"
elif [ "$(uname -o)" == "GNU/Linux" ] ; then
### Linux
SMARTOPT="-H"
else
### Windows
SMARTOPT="-h"
fi
#------------------------------------------------------------------------------#
LAUFWERKE="$(grep -F ' Serial Number ' /var/log/dmesg.boot | awk -F':' '/: /{print $1}')"
#echo "LAUFWERKE='${LAUFWERKE}'"
#------------------------------------------------------------------------------#
SERIAL_SLOT="$(for i in ${LAUFWERKE}
do
cat /var/log/dmesg.boot | sed -ne "/^${i} /,/ Serial Number /p"
done)"
#echo "SERIAL_SLOT='${SERIAL_SLOT}'"
#exit
#------------------------------------------------------------------------------#
(
for PLATTE in ${LAUFWERKE}
do
echo "================================================================="
echo "${SERIAL_SLOT}" | egrep "^${PLATTE}[:]* "
echo
#smartctl ${SMARTOPT} /dev/${PLATTE} | grep -F Serial
smartctl ${SMARTOPT} /dev/${PLATTE} | grep -Ei 'Serial|Error'
### bei Linux auch moeglich
#hdparm -i /dev/${PLATTE}
echo "-----------------------------------------------------------------"
done
) 2>&1 | tee /var/log/${SKRIPTNAME}.log
ls -lha /var/log/${SKRIPTNAME}.log
#------------------------------------------------------------------------------#
===== Handyuhr "Burg 12" =====
=== als Massenspeicher ===
steckt man die Uhr an den USB-Port, dann kann man das hier in DMESG sehen:
> dmesg
...
ugen2.3: at usbus2
umass0: <6225--Storage> on usbus2
umass0: SCSI over Bulk-Only; quirks = 0x4000
umass0:7:0:-1: Attached to scbus7
da0 at umass-sim0 bus 0 scbus7 target 0 lun 0
da0: Removable Direct Access SCSI-0 device
da0: 1.000MB/s transfers
da0: Attempt to query device size failed: NOT READY, Medium not present
da1 at umass-sim0 bus 0 scbus7 target 0 lun 1
da1: Removable Direct Access SCSI-0 device
da1: 1.000MB/s transfers
da1: 1MB (2048 512 byte sectors: 64H 32S/T 1C)
zieht man die Uhr vom USB-Port wieder ab, dann kann man das hier in DMESG sehen:
> dmesg
...
ugen2.3: at usbus2 (disconnected)
umass0: at uhub2, port 2, addr 3 (disconnected)
(da0:umass-sim0:0:0:0): lost device - 0 outstanding, 1 refs
(da1:umass-sim0:0:0:1): lost device - 0 outstanding, 1 refs
(pass4:umass-sim0:0:0:0): passdevgonecb: devfs entry is gone
(pass5:umass-sim0:0:0:1): passdevgonecb: devfs entry is gone
(da0:umass-sim0:0:0:0): removing device entry
(da1:umass-sim0:0:0:1): removing device entry
> mount -t msdosfs /dev/da1 /mnt
> find /mnt
/mnt
/mnt/@mms
/mnt/sat
/mnt/phb_video.dat
/mnt/Settings
/mnt/Download
/mnt/SMSSimCust
=== als USB-Modem (COM-Port) ===
> dmesg
...
ugen2.3: at usbus2
umodem0: <6225 COMcommif> on usbus2
umodem0: data interface 0, has CM over data, has break