Skip to main content

NetApp-Shelf - 520-Byte Sektoren

Zielgruppe: Admins mit gemischten SAS-Shelfs (z. B. NetApp) an Linux-Servern.
Diese Anleitung erklärt warum 520-Byte-Sektoren existieren, wie man betroffene Platten identifiziert und welche Wege es gibt, sie nutzbar zu machen (oder bewusst auszublenden), ohne produktive Datenträger anzutasten.

Inhalt

  1. Warum haben manche NetApp-Platten 520 B/Sektor?
  2. Typische Symptome & Kernel-Logs
  3. Voraussetzungen & Pakete
  4. Betroffene Platten sicher finden (ohne Risiko für Daten)
  5. Entscheidung: Reformatieren, Übersetzen oder Ausblenden
  6. Reformatieren auf 512 B/4 Kn (falls erlaubt)
  7. Fortschritt & Status überwachen
  8. Nachbereitung: Rescan, Multipath, Partition/FS
  9. Wenn Reformatierung verweigert wird (Vendor-Lock)
  10. Optional: Multipath-Spam vermeiden (Blacklist)
  11. Troubleshooting-Tabelle
  12. Anhang: hilfreiche One-Liner/Skripte

1) Warum haben manche NetApp-Platten 520 Byte pro Sektor?

  • 520 B = 512 B Nutzdaten + 8 B T10 PI/DIF (Protection Information).
  • DIF/PI fügt pro Block Tags/Checksummen hinzu (u. a. LBA-Tag), womit End-to-End-Integrität von Host → Controller → Medium geprüft wird.
  • Vorteile: bessere Fehlererkennung, Schutz gegen „silent corruption“, wichtig in Enterprise-Storage (z. B. ONTAP).
  • Nachteil unter Standard-Linux: Der Kernel erwartet 512n/4Kn. 520 B werden als „unsupported“ abgelehnt.

Merke: 4160 B physische Blockgröße in Logs = 8 × 520 B.

2) Typische Symptome & Kernel-Logs

  • Unsupported sector size 520
  • Preferred minimum I/O size 4096 bytes not a multiple of physical block size (4160 bytes)
  • Multipath: failed to setup map ... uevent trigger error
  • Geräte erscheinen mehrfach (mehrere SAS-Pfade), z. B. /dev/sdcx, /dev/sdcy, /dev/sg108, /dev/sg109 – sind aber derselbe physische Datenträger.

3) Voraussetzungen & Pakete

# Debian/Ubuntu
apt-get update
apt-get install -y sg3-utils lsscsi multipath-tools smartmontools

# RHEL/CentOS/Rocky/Alma
yum install -y sg3_utils lsscsi device-mapper-multipath smartmontools
Wichtig: Formatieren (sg_format) zerstört alle Daten auf der betroffenen Platte. Diese Anleitung zeigt, wie du nur die neuen/unerwünschten 520 B-Platten anfasst und produktive Disks sicher ignorierst.

4) Betroffene Platten sicher finden (ohne Risiko)

4.1 Geräte & Pfade auflisten

lsscsi -g | grep -E "NETAPP|HGST|Seagate|TOSHIBA"    # Beispielhaft; Hersteller ggf. anpassen
# Ausgabe zeigt je Zeile: ...  /dev/sdX   /dev/sgY

4.2 Prüfen, ob 520 B gemeldet werden

Die sg*-Geräte (SCSI generic) für Detailabfragen verwenden:

sg_readcap -l /dev/sg108
# Wichtige Zeilen:
#   Logical block length=520 bytes
#   Logical blocks per physical block exponent=3 [phys = 4160 bytes]
#   Device size: ... 5.99 TB

4.3 Sicherstellen, dass es derselbe physische Datenträger ist (Multipath)

Bei mehreren Pfaden hat jedes einen eigenen /dev/sg*. Die LU name (LUN-WWN) ist identisch:

sg_inq -i /dev/sg108 | grep -E "Unit serial number|LU name"
sg_inq -i /dev/sg109 | grep -E "Unit serial number|LU name"
# Sind LU name und/oder Unit serial identisch → gleicher Datenträger über zwei Pfade.
Regel: Wenn du formatierst, dann immer nur genau einen Pfad (z. B. /dev/sg108) zum selben Laufwerk verwenden!

5) Entscheidung: Reformatieren, Übersetzen oder Ausblenden

Weg Wann? Pro Contra
Reformatieren auf 512 B/4096 B Nur bei neuen/leerem Laufwerk, wenn Firmware es erlaubt Standard-Linux nutzbar, keine Spezial-HW Vernichtet Daten; 2–4 h/6 TB (oft), manche NetApp-OEMs verbieten es
On-the-fly Übersetzung (HBA/RAID mit DIF-Translation) Wenn Reformat blockiert ist, aber Controller PI/DIF-Translation beherrscht OS sieht 512 B, Laufwerk bleibt 520 B Abhängig von Hardware-Modell/Firmware; nicht jeder HBA kann das
Ausblenden/Blacklisten Wenn Platte nicht benötigt/kompatibel ist Ruhe im syslog/multipath Platte bleibt ungenutzt

6) Reformatieren auf 512 B/4 Kn (falls erlaubt)

Gefahr: Vergewissere dich zu 100 %, dass du eine neue/leere Platte erwischt. Prüfe LU name und Unit serial number. Niemals produktive Disks anfassen.

6.1 Multipath kurz pausieren (verhindert Verwirrung)

systemctl stop multipathd
multipath -F   # alle Maps flushen

6.2 Probe-Format (Dry-Run)

Testet nur, ob die Firmware 512/4096 akzeptiert – es passiert noch nichts:

# 512-Byte testen
sg_format --format --size=512 --six --fmtpinfo=0 --dry-run /dev/sg108

# 4Kn (4096) als Alternative testen
sg_format --format --size=4096 --six --fmtpinfo=0 --dry-run /dev/sg108

# Typische Fehler bei Vendor-Lock:
#   "INVALID FIELD IN CDB" oder "Device not ready" → Reformat nicht erlaubt.

6.3 Schnellstmögliches Format anstoßen

Wenn der Dry-Run OK ist, starte das Format. Manche Firmwares unterstützen „fast“/„complete list“ – andere ignorieren es.

# Schnellvariante versuchen (falls Firmware unterstützt):
sg_format --format --size=512 --six --fmtpinfo=0 --cmplst=1 --early /dev/sg108

# Fällt Firmware auf Full-Format zurück, dauert es entsprechend (2–4h/6TB).
# Alternative "fast format":
sg_format --format --size=512 --six --fmtpinfo=0 --ffmt=1 --early /dev/sg108

Hinweis: --early kehrt sofort zurück, das Laufwerk formatiert im Hintergrund weiter. Auf Systemen ohne --early beende das Userspace-Tool notfalls mit Ctrl+C; der Vorgang im Laufwerk läuft weiter.

7) Fortschritt & Status überwachen

# Regelmäßig Sense-Daten abfragen (zeigt Fortschritt, wenn verfügbar)
sg_requests /dev/sg108
# Beispielausgabe:
#  Sense key: Not Ready
#  Additional sense: Logical unit not ready, format in progress
#    Progress indication: 37.50%

# Alternativ (je nach Build):
sg_turs /dev/sg108      # "Unit ready" wenn fertig; manche Builds können nicht anzeigen
# Live-Monitoring:
watch -n 60 sg_requests /dev/sg108
Abbrechen? Ein laufendes FORMAT UNIT lässt sich nicht sauber abbrechen. Stromlos/Slot ziehen ist riskant und endet oft damit, dass du erneut formatieren musst.

8) Nachbereitung: Rescan, Multipath, Partition & Filesystem

# Nach Abschluss erneut einlesen
rescan-scsi-bus.sh -a    # ggf. aus 'sg3-utils' Zusatzpaket
# prüfen:
sg_readcap -l /dev/sg108
# Erwartet: "Logical block length=512 bytes" (oder 4096)

# Blockgeräte-Ansicht
lsblk -o NAME,HCTL,WWN,MODEL,LOG-SEC,PHY-SEC,SIZE

# Multipath wieder starten
systemctl start multipathd
multipath -ll

# (Optional) Partition & Filesystem
# GPT anlegen und 1 große Partition:
parted -s /dev/sdX mklabel gpt mkpart primary 1MiB 100%

# z. B. XFS:
mkfs.xfs -f /dev/sdX1
# oder ext4:
mkfs.ext4 -F -L data01 /dev/sdX1

# Mountpunkt
mkdir -p /mnt/data01
echo '/dev/sdX1  /mnt/data01  xfs  defaults,noatime  0 2' >> /etc/fstab
mount -a

9) Wenn Reformatierung verweigert wird (Vendor-Lock)

  • Erkennung: sg_format --dry-run oder direktes sg_format meldet INVALID FIELD IN CDB / Device not ready (bei MODE SENSE/SELECT) oder akzeptiert nur 520 B.
  • Optionen:
    • Platte hinter einem NetApp-Controller (ONTAP) verwenden (520 B nativ).
    • HBA/RAID einsetzen, der PI/DIF-Translation (520→512) beherrscht (einige Broadcom/LSI-MegaRAID-Modelle). OS sieht 512 B.
    • Platte tauschen gegen 512n/4Kn-Modell.

10) Optional: Multipath-Spam vermeiden (Blacklist)

Wenn du 520 B-Platten nicht nutzen kannst/willst, blackliste sie (z. B. nach Vendor/Product):

# /etc/multipath/conf.d/blacklist.conf
blacklist {
    vendor  "NETAPP"
    product "X316_SMKRE06TA07"
}
systemctl reload multipathd

11) Troubleshooting-Tabelle

Symptom Ursache Maßnahme
Unsupported sector size 520 Linux erwartet 512n/4Kn Reformat (falls erlaubt) oder HBA-Übersetzung oder Blacklist
Preferred minimum I/O size 4096 ... not a multiple of 4160 Physischer Block = 4160 B (8×520) Wie oben; Platte ist 520 B-formatiert
multipathd: failed to setup map ... Gerät mit 520 B; kein nutzbares Blockdevice Nach Reformat OK; sonst Blacklist
sg_format ... Device not ready (MODE SENSE) Firmware blockiert Reformat / bereits Format läuft Mit sg_requests prüfen; ggf. später erneut versuchen
INVALID FIELD IN CDB Reformat auf 512/4096 verboten (Vendor-Lock) Nur NetApp/HBA-Translation/tauschen
Mehrere /dev/sg* für dieselbe Platte Mehrpfad (zwei Controller/Ports) Nur einen Pfad formatieren; Gleichheit via LU name prüfen

12) Anhang: hilfreiche One-Liner & Schnipsel

12.1 Alle 520 B-Kandidaten listen (mit sd-Mapping & LU-WWN)

#!/usr/bin/env bash
# list-520.sh — listet alle SCSI-Geräte mit 520-Byte-Sektoren
for sg in /dev/sg*; do
  cap=$(sg_readcap -l "$sg" 2>/dev/null | tr -d '\r')
  [[ -z "$cap" ]] && continue
  if echo "$cap" | grep -q "Logical block length=520 bytes"; then
    sd=$(lsscsi -g | awk -v s="$sg" '$NF==s{print $(NF-1)}')
    inq=$(sg_inq -i "$sg" 2>/dev/null)
    serial=$(echo "$inq" | awk -F': ' '/Unit serial number/{print $2}')
    lun=$(echo "$inq" | awk -F': ' '/LU name/{print $2}')
    size=$(echo "$cap" | awk -F': ' '/Device size/{print $2}')
    printf "%-8s %-8s %-20s %-20s %s\n" "$sg" "${sd:--}" "${serial:--}" "${lun:--}" "$size"
  fi
done

12.2 Nur einen Pfad pro physischer Disk wählen (per LU-Name deduplizieren)

#!/usr/bin/env bash
# pick-one-path.sh — gibt pro LU (LUN WWN) genau EIN /dev/sg* aus
declare -A seen
for sg in /dev/sg*; do
  lun=$(sg_inq -i "$sg" 2>/dev/null | awk -F': ' '/LU name/{print $2}')
  [[ -z "$lun" ]] && continue
  if [[ -z "${seen[$lun]}" ]]; then
    echo "$sg"
    seen[$lun]=1
  fi
done

12.3 Format sicher anstoßen (schnellstmöglich, wenn erlaubt)

# Beispiel: genau EINEN Pfad der Zielplatte verwenden!
systemctl stop multipathd
multipath -F

# Dry-Run (prüfen, ob 512 akzeptiert wird)
sg_format --format --size=512 --six --fmtpinfo=0 --dry-run /dev/sgXYZ

# Start (Firmware versucht "fast", fällt ggf. auf "full" zurück)
sg_format --format --size=512 --six --fmtpinfo=0 --cmplst=1 --early /dev/sgXYZ

# Fortschritt
watch -n 60 sg_requests /dev/sgXYZ

# Nach Abschluss
rescan-scsi-bus.sh -a
sg_readcap -l /dev/sgXYZ
systemctl start multipathd
multipath -ll

Kurzfazit: 520 B-Sektoren sind bei NetApp wegen T10 PI/DIF ein Feature für Datenintegrität. Unter generischem Linux sind solche Platten ohne Reformat/Übersetzung nicht nutzbar. Wenn die Firmware Reformat erlaubt: sicher auf 512 B/4 Kn umstellen (nur einen Pfad!), Fortschritt mit sg_requests prüfen, danach wie gewohnt einbinden. Wenn nicht: NetApp-Controller oder HBA mit DIF-Translation verwenden – ansonsten die Geräte sauber blacklisten.