class

Silex::FatImage

Inherits Reference < Object

Writer FAT12 pur Crystal.

Construit une image de système de fichiers FAT12 en mémoire, utilisable pour générer des seed disks cloud-init NoCloud (user-data, meta-data) sans outil externe.

Le plan disque suit la spécification Microsoft FAT (ECMA-107) :

+-------------------+
| Boot sector (BPB) |  1 secteur (512 o)
+-------------------+
| FAT #1            |  sectors_per_fat
+-------------------+
| FAT #2            |  sectors_per_fat  (copie)
+-------------------+
| Root directory    |  root_dir_sectors (taille fixe)
+-------------------+
| Data area         |  clusters de sectors_per_cluster secteurs
+-------------------+

Les noms de fichiers longs (> 8.3) sont stockés via des entrées VFAT LFN précédant l'entrée 8.3 classique. Indispensable pour que cloud-init lise user-data et meta-data (9 caractères chacun, hors 8.3).

Constants

ATTR_ARCHIVE = 32_u8
ATTR_DIRECTORY = 16_u8
ATTR_HIDDEN = 2_u8
ATTR_LFN = 15_u8
ATTR_READ_ONLY = 1_u8

Attributs FAT.

ATTR_SYSTEM = 4_u8
ATTR_VOLUME_ID = 8_u8
DIR_ENTRY_SIZE = 32

Entrée de répertoire sur disque : toujours 32 octets (FAT ou VFAT).

MAX_FILENAME_LENGTH = 255

Longueur max d'un nom de fichier. 255 = limite VFAT LFN.

MAX_SIZE_BYTES = (16 * 1024) * 1024

Taille maximale : FAT12 ne gère que 4084 clusters utiles. Avec sectors_per_cluster = 1 et secteur 512 octets, ~2 Mo. Avec sectors_per_cluster = 8, ~16 Mo. Silex accepte jusqu'à 16 Mo.

MIN_SIZE_BYTES = 32 * 1024

Taille minimale acceptée (32 KB). En dessous, FAT12 n'a plus vraiment de sens et les implémentations divergent.

SECTOR_SIZE = 512

Taille d'un secteur en octets. FAT12 tolère 512, 1024, 2048, 4096 ; Silex s'en tient à 512 pour la simplicité et la compatibilité maximale.

Constructors

new(size_bytes : Int32, label : String = "NO NAME")

Crée une nouvelle image vide.

  • size_bytes — taille totale de l'image (doit être multiple de 512).
  • label — étiquette de volume (max 11 caractères ASCII, en majuscules de préférence). "CIDATA" pour cloud-init NoCloud.
Source
read(bytes : Bytes) : FatImage

Parse une image FAT12 existante et renvoie un FatImage dont #files contient la liste des fichiers lus. Permet le test aller-retour.

Source

Instance methods

add_file(name : String, content : String) : Nil

Ajoute un fichier. Le contenu peut être une String ou des Bytes.

Source
add_file(name : String, content : Bytes) : Nil
Source
files
Source
label
Source
size_bytes
Source
to_slice

Sérialise l'image complète en Bytes (Slice(UInt8)).

Source

Nested types