È arrivato il momento di configurare il nostro file fstab per indicare dove si troveranno le partizioni che andremmo a creare sul disco del nostro dispositivo embedded. Supponiamo di utilizzare una configurazione di questo tipo:
/dev/hda1 / ext2 defaults,noatime,ro 0 1 /dev/hda2 /rw ext2 defaults,noatime 0 2 /dev/hda3 /usr squashfs ro,defaults 0 0 /dev/fd0 /mnt/floppy vfat noauto 0 0 /dev/sda1 /mnt/usb vfat noauto 0 0 proc /proc proc defaults 0 0 devpts /dev/pts devpts defaults,mode=620 0 0 tmpfs /tmp tmpfs defaults 0 0 none /sys sysfs defaults 0 0 none /dev/shm tmpfs defaults 0 0 |
Nota: non abbiamo alcuna partizione di swap perchè normalmente un sistema embedded non possiede un disco così grande da poter essere utilizzato per lo swap.
Normalmente, sui sistemi embedded, si utilizzano dischi a stato solido in tecnologia flash. Il taglio più utilizzato si attesta normalmente sui 128 Mb. Stando alle voci circolanti sulla rete, questo tipo di supporti non garantiscono cicli di scrittura "infiniti". Per questo motivo, ed anche perch´ i dispositivi embedded possono essere normalmente soggetti a bruschi shutdown ed assenze di alimentazione, è preferibile tenere l'intero filesystem totalmente in read-only, ed al limite lasciare qualche piccola porzione del disco in read-write: 4 mb a volte sono più che sufficienti per gli usi più disparati. Ecco il nostro fstab soprastante rispecchiare quanto detto:
/dev/hda1: è la partizione di root, approssimativamente attorno ai 20 Mb, in read only, il tipo di filesystem utilizzato è ext2, ma nulla vieta di utilizzare un altro tipo di filesystem. Uno molto indicato, specie per le memorie flash, sembra essere (TODO: filesystem che usa familiar);
/dev/hda2: è la partizione che può usata in read-write, può essere usata per memorizzare file che vengono cambiati spesso nel sistema, come, ad esempio, configurazioni della rete, password file, piccoli database su file txt puri, o SQLite. Il file system utilizzato nell'esempio è ext2; La dimensione consigliata dipende dall'uso specifico del sistema embedded, ma una dimensione di 4 Mb dovrebbe essere adatta agli usi più disparati;
/dev/hda3: è il filesystem corrispondente al mount point /usr, qui troviamo normalmente tutti i programmi e le librerie, per questo motivo questa risulta essere una partizione abbastanza grande. Nell'esempio viene usato SquashFS. Quest'ultimo è un filesystem compresso ottimizzato per un solo accesso read-only. Viene molto usato per confezionare distribuzione live linux su CD-ROM, essendo capace di comprimere a volte con percentuali superiori al 60% una normale partizione, più avanti in questa guida verrà spiegato come creare il file system;
/dev/fd0 e /dev/sda1: sono dei mountpoint (filesystem di tipo vfat) opzionali per il mouting di eventuali floppy o dispositivi di memoria flash (come penne usb);
Le entry successive sono entry necessarie per il funzionamento del sistema (come ad es. /proc)
Un utilizzo molto interessante della partizione /rw potrebbe essere quello di far puntare i file nella root partition che necessitano di essere scritti all'interno di un certo file dentro la partizione /rw, ecco alcuni esempi:
/embedded_rootfs/root -> /embedded_rootfs/rw/root/ /embedded_rootfs/etc/hostname -> /embedded_rootfs/rw/etc_rw/hostname /embedded_rootfs/etc/mtab -> /embedded_rootfs/rw/etc_rw/mtab /embedded_rootfs/etc/passwd -> /embedded_rootfs/rw/etc_rw/passwd /embedded_rootfs/etc/passwd- -> /embedded_rootfs/rw/etc_rw/passwd- /embedded_rootfs/etc/resolv.conf -> /embedded_rootfs/rw/etc_rw/resolv.conf /embedded_rootfs/etc/ssh -> /embedded_rootfs/rw/etc_rw/ssh /embedded_rootfs/etc/net.eth0 -> /embedded_rootfs/rw/etc_rw/net.eth0 |
# mkdir -p /embedded_rootfs/rw/etc # mv /embedded_rootfs/etc/passwd /embedded_rootfs/rw/etc/passwd # ln -s /embedded_rootfs/etc/passwd /embedded_rootfs/rw/etc/passwd |