Comment créer un rescue floppy disk
Premièrement compiler un noyau minimaliste avec support ramdisk
Petite astuce : on peut modifier le makefile et utiliser un Os au lieu du O2
ceci va indiquer à gcc de compiler en optimisant sur une taille minimale
Créer un Filesystem on va créer un répertoire rootfs puis on aller dedans:
mkdir rootfs
cd rootfs
mkdir dev
mkdir proc
mkdir etc
mkdir sbin
mkdir bin
mkdir lib
mkdir mnt
mkdir usr
cp -dpR /dev/fd[01]* dev
cp -dpR /dev/tty[0-6] dev
cp -dpR /dev/console dev
cp -dpR /dev/kmem dev
cp -dpR /dev/mem dev
cp -dpR /dev/null dev
cp -dpR /dev/ram0 dev
ls -RAl rootfs/
En fait on utilise comme shell l'excellent busybox compilé en statique, afin qu'il n'y ait aucune dépendance sur des librairies gourmandes en espace.
On doit personnaliser les fichiers dans /etc et les réduire au strict minimum :
Puis il s'agit de préparer notre filesystem
dd if=/dev/zero of=cgramdisk bs=1024 count=2000
mke2fs -m0 -N2000 cgramdisk
mount -o loop cgramdisk /mnt
cp -ar rootfs/* /mnt/
umount /mnt/
gzip -v9 cgramdisk
ensuite il faut transférer le noyau sur floppy :
dd if=/usr/src/linux-2.4.26/arch/i386/boot/bzImage of=/dev/fd0 bs=1k
On obtient en retour le nbre de bytes transferés
759+1 records in
759+1 records out
777543 bytes transferred in 50.933104 seconds (15266 bytes/sec)
dd if=cgramdisk.gz of=/dev/fd0 bs=1k seek=765
ca va nous donner
463+1 records in
463+1 records out
474420 bytes transferred in 32.090229 seconds (14784 bytes/sec)
2 puissance 14 + 765 = 17149
rdev -r /dev/fd0 17149
rdev /dev/fd0 /dev/fd0
rdev -R /dev/fd0 0
Petite astuce : on peut modifier le makefile et utiliser un Os au lieu du O2
ceci va indiquer à gcc de compiler en optimisant sur une taille minimale
Créer un Filesystem on va créer un répertoire rootfs puis on aller dedans:
mkdir rootfs
cd rootfs
mkdir dev
mkdir proc
mkdir etc
mkdir sbin
mkdir bin
mkdir lib
mkdir mnt
mkdir usr
cp -dpR /dev/fd[01]* dev
cp -dpR /dev/tty[0-6] dev
cp -dpR /dev/console dev
cp -dpR /dev/kmem dev
cp -dpR /dev/mem dev
cp -dpR /dev/null dev
cp -dpR /dev/ram0 dev
ls -RAl rootfs/
drwxr-xr-x 2 root root 4096 Jul 9 15:15 bin
drwxr-xr-x 2 root root 4096 Jul 9 12:05 dev
drwxr-xr-x 2 root root 4096 Jul 9 15:12 etc
drwxr-xr-x 2 root root 4096 Jul 9 10:58 lib
drwxr-xr-x 2 root root 4096 Jul 9 10:58 mnt
drwxr-xr-x 2 root root 4096 Jul 9 10:58 proc
drwxr-xr-x 2 root root 4096 Jul 9 12:47 sbin
drwxr-xr-x 2 root root 4096 Jul 9 10:58 usr
rootfs/bin:
lrwxr-xr-x 1 root root 7 Jul 9 15:15 bash -> busybox
-rwxr-xr-x 1 root root 944856 Jul 9 15:08 busybox
lrwxr-xr-x 1 root root 7 Jul 9 15:15 sh -> busybox
rootfs/dev:
crw------- 1 root tty 5, 1 Jul 9 11:55 console
brw-rw---- 1 root floppy 2, 0 Apr 30 02:28 fd0
crw-r----- 1 root kmem 1, 2 Jul 5 10:53 kmem
crw-r----- 1 root kmem 1, 1 Jul 5 10:53 mem
crw-rw-rw- 1 root root 1, 3 Jul 5 10:53 null
brw-rw---- 1 root disk 1, 0 Jul 5 10:53 ram0
crw------- 1 root root 4, 0 Jul 5 10:53 tty0
crw------- 1 root root 4, 1 Jul 9 11:55 tty1
crw------- 1 root root 4, 2 Jul 9 11:55 tty2
crw------- 1 root root 4, 3 Jul 9 11:55 tty3
crw------- 1 root root 4, 4 Jul 9 11:55 tty4
crw------- 1 root root 4, 5 Jul 9 11:55 tty5
crw------- 1 root root 4, 6 Jul 7 16:04 tty6
rootfs/etc:
-rw-r--r-- 1 root root 133 Jul 9 12:48 fstab
-rw-r--r-- 1 root root 149 Jul 9 12:48 inittab
-rw-r--r-- 1 root root 35 Jul 9 15:12 passwd
-rwxr-xr-x 1 root root 44 Jul 9 12:12 rc
rootfs/lib: total 0
rootfs/mnt: total 0
rootfs/proc: total 0
rootfs/sbin: total 0
rootfs/usr: total 0
En fait on utilise comme shell l'excellent busybox compilé en statique, afin qu'il n'y ait aucune dépendance sur des librairies gourmandes en espace.
On doit personnaliser les fichiers dans /etc et les réduire au strict minimum :
cat rootfs/etc/passwd
root:x:0:0:root:/root:/bin/busibox
cat rootfs/etc/fstab
/dev/ram0 / ext2 defaults 0 0
/dev/fd0 / ext2 defaults 0 0
proc /proc proc defaults 0 0
cat rootfs/etc/inittab
# /etc/inittab: init(8) configuration.
id:2:initdefault:
si::sysinit:/etc/rc
ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
1:2345:respawn:/bin/sh
cat rootfs/etc/rc
#!/bin/sh
/bin/mount -av
/bin/hostname box3
Puis il s'agit de préparer notre filesystem
dd if=/dev/zero of=cgramdisk bs=1024 count=2000
mke2fs -m0 -N2000 cgramdisk
mount -o loop cgramdisk /mnt
cp -ar rootfs/* /mnt/
umount /mnt/
gzip -v9 cgramdisk
ensuite il faut transférer le noyau sur floppy :
dd if=/usr/src/linux-2.4.26/arch/i386/boot/bzImage of=/dev/fd0 bs=1k
On obtient en retour le nbre de bytes transferés
759+1 records in
759+1 records out
777543 bytes transferred in 50.933104 seconds (15266 bytes/sec)
dd if=cgramdisk.gz of=/dev/fd0 bs=1k seek=765
ca va nous donner
463+1 records in
463+1 records out
474420 bytes transferred in 32.090229 seconds (14784 bytes/sec)
2 puissance 14 + 765 = 17149
rdev -r /dev/fd0 17149
rdev /dev/fd0 /dev/fd0
rdev -R /dev/fd0 0
Commentaires