Hallo zusammen,
mich beschäftigen derzeit ein paar Fragen, die ich selbst nicht beantworten kann.
Ich habe hier eine 4 TB-Festplatte und ein externes Festplattengehäuse, das bei Festplatten größer als 2 TB eine 4k-Emulation durchführt (also werden je 8 logische Sektoren zu je 512 Byte der Festplatte (die ja eigentlich selbst 4k-Sektoren intern verwendet und die 512-Byte-Sektoren nur emuliert) zu einem 4k-Sektor zusammengefasst),
ein fdisk -l erzeugt
Sektorgröße (logisch/physikalisch): 4096 Bytes / 4096 Bytes
Nun möchte ich mir gerne die Option offenhalten, die eingebaute Festplatte bei Bedarf intern zu verwenden (zum Beispiel, falls der Controller mal kaputtgehen sollte), was allerdings ein paar Probleme bereitet. Wird die Festplatte intern eingebaut, ergibt sich logischerweise ein anderes Bild:
Sektorgröße (logisch/physikalisch): 512 Bytes / 4096 Bytes
Wird GPT-Partitionierung genutzt, so enthält Sektor 1 natürlich beim Wechsel intern->extern (oder umgekehrt) nicht mehr die GPT-Tabelle.
Wird dagegen (testweise, weil ja Größenbeschränkung) MBR genutzt, enthält Sektor 0 natürlich bei beiden Sektorgrößen die Partitionierungsinformationen - nur sind diese eben nicht unbedingt korrekt (weil sich die Blockgröße ja unterscheidet): die Partitionsgrößen sind falsch und die Partitionen lassen sich natürlich nicht mounten.
Soweit alles klar, aber jetzt wird's interessant (bzw. jetzt überschreitet es meine Kenntnisse)
Wenn ich die Festplatte unpartitioniert lasse und stattdessen mit LUKS formatiere (cryptsetup luksFormat /dev/sde (ohne Zahl)) oder auf der gesamten Festplatte ein ext4-Dateisystem erzeuge (mkfs.ext4 /dev/sde (dito)), dann kann ich die Festplatte (anscheinend) intern/extern tauschen wie ich will, ich komme immer an die Daten dran und es scheint kein Problem zu geben.
Das wundert mich aber - im LUKS-Header ist meines Wissens nach der Payload Offset in Sektoren angegeben, weshalb das mappen ja eigentlich nicht funktionieren dürfte und irgendwie muss ja auch ext4 die Festplatte adressieren.
Die Frage ist nun:
warum funktioniert das Mounten trotz Blockgrößenunterschied, wenn ich die ganze Festplatte nutze? Wird da nicht mit Sektoren gearbeitet? Ist der Kernel etwa intelligent genug, da eine Übersetzung durchzuführen, falls irgendwelche Daten nicht übereinstimmen?
Ich hoffe, irgendjemand hat mehr Ahnung als ich und kann mir weiterhelfen.