[TUTORIAL] slackware su ntfs
Inviato: mer 17 ott 2007, 18:01
Questi giorni ho elaborato una grande zozzata, più per didattica che per utilità.
Il movente:
molti portatili, oggi, hanno la garanzia legata al sistema operativo installato (vista) e la perdì se solo poco poco tocchi la tabella delle partizione (perchè poi non si sa)
E allora... come mettere linux?
sono riuscito ad installare slackware su partizione XP mettendolo in un file da montare in loopback.
Manca solo un passo (purtroppo fatale) per farla funzionare.
Le operazioni da fare sono un po', nessuna complicata in se stessa; complicato è solo metterle insieme; ci ho speso un po' di tempo per trovarle.
Qualche passo è descritto troppo dettagliatamente per un pubblico di esperti slackwaristi, ma il tutorial era diretto ad altre persone che slackware l'hanno solo installato "alla windows"
I passi a grande linee sono:
1) creare il file su cui installare linux
2) installare linux dentro quel file
3) installare il bootloader all'interno di un altro file
4) inserire il bootloader in boot.ini di windows
5) rebootare
I passi 1 e 4 andranno fatti da windows
Il passo 2 va fatto, ovviamente, dall'installer di slackware
Il passo 3 va fatto da una knoppix (o similare)
Tenete tutto l'occorrente a disposizione.
- avviare windows
- Start->Esegui-> cmd
1#C:> cd \
2#C:> mkdir LINUX
3#C:> cd LINUX
4#C:> mkdir boot
5#C:> fsutil file createnew rootlinux.img 1000000000
Il file C:\LINUX\rootlinux.img è stato creato
6#C:> dir
17/10/2007 11.06 1.000.000.000 rootlinux.img
- inserire il cd di slackware e rebootare
- al prompt dell'installazione:
1#/> mkdir /xp
2#/> mount /dev/hda1 /xp
3#/> dmesg|tail
NTFS-fs error (device hda1): load_system_files(): Volume has unsupported flags set. Mounting read-only. Run chkdsk and mount in Windows.
4#/> reboot
- avviare in windows
- è probabile che parta il chkdsk; se non parte:
- Start -> Esegui -> cmd
11#C:> chkdsk C: /f /l /x
- verrà schedulato il chkdsk per il prossimo reboot
- riavviare. Partirà il chkdsk; il sistema sarà riavviato automaticamente
- entrare dentro windows e riavviare
- rieseguire l'installer di slackware
1#/> mkdir /xp
2#/> mount /dev/hda1 /xp
3#/> dmesg|tail
NTFS volume version 3.1.
4#/> losetup /dev/loop0 /xp/LINUX/rootlinux.img
5#/> mke2fs -j /dev/loop0
6#/> mount /dev/loop0 /mnt
7#/> setup
NO LINUX PARTITION FOUND (ignoriamo il messaggio)
- continuare con la configurazione normale
- saltare TARGET e non configurare NTFS or FAT partitions
- all'INSTALL darà
CANNOT INSTALL SOFTWARE YET (non gli abbiamo detto dove)
- lo inganniamo: premere ALT+F2
8#/> touch /tmp/SeTnative
- ALT+F1 e riscegliamo INSTALL
- continuiamo la configurazione in modo classico
- a lilo scegliamo SIMPLE e ROOT come device
ovviamente fallirà, però almeno ci ha creato un lilo.conf di base
9#/> chroot /mnt
10#/$ cd /usr/share/mkinitrd
11#mkinitrd/$ mkdir initrd
12#mkinitrd/$ cd initrd
13#initrd/$ tar zxf ../initrd-tree.tar.gz
14#initrd/$ vi init
- dopo "# Switch to real root partition:" aggiungere
mount -t ntfs /dev/hda1 /xp
losetup $ROOTDEV /xp/LINUX/rootlinux.img
- sia in fondo, sia prima di "exit 1" aggiungere, per debug:
/bin/sh
15#initrd/$ mkdir xp
16#initrd/$ cp /sbin/losetup bin/
17#initrd/$ cp /lib/ld-linux.so.2 /lib/libc.so.6 lib/
18#initrd/$ mknod dev/loop0 b 7 0
19#initrd/$ mknod dev/loop0 b 3 0
20#initrd/$ mknod dev/loop0 b 3 1
21#initrd/$ mv ../initrd-tree.tar.gz ../initrd-tree.tar.gz-orig
22#initrd/$ tar czf ../initrd-tree.tar.gz .
23#initrd/$ cd /etc
24#/etc/$ vi lilo.conf
boot = /xp/bootsect.b
prompt
timeout = 1200
change-rules
reset
vga = normal
image = /boot/vmlinuz
label = linux
root = /dev/loop0
read-only
initrd=/boot/initrd.gz
25#/etc/$ exit
26#/> umount /mnt
27#/> umount /xp
28#/> reboot
- avviare con knoppix. Consiglio la modalità testo (knoppix 2 lang=it al prompt)
1#> mkdir /xp
2#> mkdir /slak
3#> mount -t ntfs-3g /dev/hda /xp
Volume is scheduled for check.
Please boot into Windows TWICE, or use the 'force' mount option.
4#> mount -t ntfs-3g -o force /dev/hda1 /xp
5#> mount -o loop /xp/LINUX/rootlinux.img /slak
6#> mkdir /xp/LINUX/boot
7#> rm /boot
8#> ln -s /slak/boot /
9#> chroot /slak
10#> cd /boot
11#> mkinitrd -c -f ext2 -r /dev/loop0
12#> exit
13#> cp /slak/boot/{vmlinuz,initrd.gz} /boot
14#> dd if=/dev/zero of=/xp/bootsect.b count=1
15#> lilo -C /slak/etc/lilo.conf
Added linux *
16#> vi /slak/etc/fstab
/dev/loop0 / ext3 defaults 1 0
17#> vi /xp/boot.ini
C:\bootsect.b="Linux"
17#> umount /slak
18#> umount /xp
19#> reboot
- riavviate in windows come prima, per forzare un check (poco fa a me l'ha chiesto)
- al boot vi verrà chiesto se caricare Windows o Linux. Scegliendo linux verrà caricato lilo. Premete ancora invio per caricare linux e pregate.
In teoria dovrebbe funzionare ora.
In pratica c'è ancora un grosso problema da risolvere, cioè che al boot sembrerebbe che initrd non riesca a montare in read-write l'ntfs:
NTFS-fs error (device hda1): load_system_files(): Volume has unsupported flags set. Mounting read-only. Run chkdsk and mount in Windows.
e sembra non se ne voglia andare nemmeno con il chkdsk e riavvio in windows.
io ho una teoria, e cioè che windows monti C: in read-write già da quando carica il boot.ini; quando lilo lancia il kernel, questo rimane in stato montato.
Sto cercando un workaround... vi terrò aggiornati.
Comunque è partito e correttamente finchè non prova a rimontare read-write il rootfs, allorchè si arrabbia, ovviamente, perchè l'ntfs è montata read-only
Ditemi cosa ne pensate
e se sapete qualcosa per risolvere l'ultimo problema.
Ciao,
01
Il movente:
molti portatili, oggi, hanno la garanzia legata al sistema operativo installato (vista) e la perdì se solo poco poco tocchi la tabella delle partizione (perchè poi non si sa)
E allora... come mettere linux?
sono riuscito ad installare slackware su partizione XP mettendolo in un file da montare in loopback.
Manca solo un passo (purtroppo fatale) per farla funzionare.
Le operazioni da fare sono un po', nessuna complicata in se stessa; complicato è solo metterle insieme; ci ho speso un po' di tempo per trovarle.
Qualche passo è descritto troppo dettagliatamente per un pubblico di esperti slackwaristi, ma il tutorial era diretto ad altre persone che slackware l'hanno solo installato "alla windows"
I passi a grande linee sono:
1) creare il file su cui installare linux
2) installare linux dentro quel file
3) installare il bootloader all'interno di un altro file
4) inserire il bootloader in boot.ini di windows
5) rebootare
I passi 1 e 4 andranno fatti da windows
Il passo 2 va fatto, ovviamente, dall'installer di slackware
Il passo 3 va fatto da una knoppix (o similare)
Tenete tutto l'occorrente a disposizione.
- avviare windows
- Start->Esegui-> cmd
1#C:> cd \
2#C:> mkdir LINUX
3#C:> cd LINUX
4#C:> mkdir boot
5#C:> fsutil file createnew rootlinux.img 1000000000
Il file C:\LINUX\rootlinux.img è stato creato
6#C:> dir
17/10/2007 11.06 1.000.000.000 rootlinux.img
- inserire il cd di slackware e rebootare
- al prompt dell'installazione:
1#/> mkdir /xp
2#/> mount /dev/hda1 /xp
3#/> dmesg|tail
NTFS-fs error (device hda1): load_system_files(): Volume has unsupported flags set. Mounting read-only. Run chkdsk and mount in Windows.
4#/> reboot
- avviare in windows
- è probabile che parta il chkdsk; se non parte:
- Start -> Esegui -> cmd
11#C:> chkdsk C: /f /l /x
- verrà schedulato il chkdsk per il prossimo reboot
- riavviare. Partirà il chkdsk; il sistema sarà riavviato automaticamente
- entrare dentro windows e riavviare
- rieseguire l'installer di slackware
1#/> mkdir /xp
2#/> mount /dev/hda1 /xp
3#/> dmesg|tail
NTFS volume version 3.1.
4#/> losetup /dev/loop0 /xp/LINUX/rootlinux.img
5#/> mke2fs -j /dev/loop0
6#/> mount /dev/loop0 /mnt
7#/> setup
NO LINUX PARTITION FOUND (ignoriamo il messaggio)
- continuare con la configurazione normale
- saltare TARGET e non configurare NTFS or FAT partitions
- all'INSTALL darà
CANNOT INSTALL SOFTWARE YET (non gli abbiamo detto dove)
- lo inganniamo: premere ALT+F2
8#/> touch /tmp/SeTnative
- ALT+F1 e riscegliamo INSTALL
- continuiamo la configurazione in modo classico
- a lilo scegliamo SIMPLE e ROOT come device
ovviamente fallirà, però almeno ci ha creato un lilo.conf di base
9#/> chroot /mnt
10#/$ cd /usr/share/mkinitrd
11#mkinitrd/$ mkdir initrd
12#mkinitrd/$ cd initrd
13#initrd/$ tar zxf ../initrd-tree.tar.gz
14#initrd/$ vi init
- dopo "# Switch to real root partition:" aggiungere
mount -t ntfs /dev/hda1 /xp
losetup $ROOTDEV /xp/LINUX/rootlinux.img
- sia in fondo, sia prima di "exit 1" aggiungere, per debug:
/bin/sh
15#initrd/$ mkdir xp
16#initrd/$ cp /sbin/losetup bin/
17#initrd/$ cp /lib/ld-linux.so.2 /lib/libc.so.6 lib/
18#initrd/$ mknod dev/loop0 b 7 0
19#initrd/$ mknod dev/loop0 b 3 0
20#initrd/$ mknod dev/loop0 b 3 1
21#initrd/$ mv ../initrd-tree.tar.gz ../initrd-tree.tar.gz-orig
22#initrd/$ tar czf ../initrd-tree.tar.gz .
23#initrd/$ cd /etc
24#/etc/$ vi lilo.conf
boot = /xp/bootsect.b
prompt
timeout = 1200
change-rules
reset
vga = normal
image = /boot/vmlinuz
label = linux
root = /dev/loop0
read-only
initrd=/boot/initrd.gz
25#/etc/$ exit
26#/> umount /mnt
27#/> umount /xp
28#/> reboot
- avviare con knoppix. Consiglio la modalità testo (knoppix 2 lang=it al prompt)
1#> mkdir /xp
2#> mkdir /slak
3#> mount -t ntfs-3g /dev/hda /xp
Volume is scheduled for check.
Please boot into Windows TWICE, or use the 'force' mount option.
4#> mount -t ntfs-3g -o force /dev/hda1 /xp
5#> mount -o loop /xp/LINUX/rootlinux.img /slak
6#> mkdir /xp/LINUX/boot
7#> rm /boot
8#> ln -s /slak/boot /
9#> chroot /slak
10#> cd /boot
11#> mkinitrd -c -f ext2 -r /dev/loop0
12#> exit
13#> cp /slak/boot/{vmlinuz,initrd.gz} /boot
14#> dd if=/dev/zero of=/xp/bootsect.b count=1
15#> lilo -C /slak/etc/lilo.conf
Added linux *
16#> vi /slak/etc/fstab
/dev/loop0 / ext3 defaults 1 0
17#> vi /xp/boot.ini
C:\bootsect.b="Linux"
17#> umount /slak
18#> umount /xp
19#> reboot
- riavviate in windows come prima, per forzare un check (poco fa a me l'ha chiesto)
- al boot vi verrà chiesto se caricare Windows o Linux. Scegliendo linux verrà caricato lilo. Premete ancora invio per caricare linux e pregate.
In teoria dovrebbe funzionare ora.
In pratica c'è ancora un grosso problema da risolvere, cioè che al boot sembrerebbe che initrd non riesca a montare in read-write l'ntfs:
NTFS-fs error (device hda1): load_system_files(): Volume has unsupported flags set. Mounting read-only. Run chkdsk and mount in Windows.
e sembra non se ne voglia andare nemmeno con il chkdsk e riavvio in windows.
io ho una teoria, e cioè che windows monti C: in read-write già da quando carica il boot.ini; quando lilo lancia il kernel, questo rimane in stato montato.
Sto cercando un workaround... vi terrò aggiornati.
Comunque è partito e correttamente finchè non prova a rimontare read-write il rootfs, allorchè si arrabbia, ovviamente, perchè l'ntfs è montata read-only
Ditemi cosa ne pensate
e se sapete qualcosa per risolvere l'ultimo problema.
Ciao,
01