Slackware su NTFS: differenze tra le versioni
(Slackware su NTFS) |
|||
| Riga 1: | Riga 1: | ||
| + | [[Category:Install_e_Upgrade]] |
||
== Introduzione == |
== Introduzione == |
||
Versione delle 14:10, 19 ott 2007
Indice |
Introduzione
Questo tutorial nasce con lo scopo di consentire l'utilizzo di Linux (in questo caso Slackware) anche a chi non vuole ripartizionare il proprio disco su cui è presente Windows.
Ecco alcuni motivi per cui qualcuno vorrebbe/dovrebbe non ripartizionare il sistema:
- Il sistema è un portatile di ultima generazione con Vista: talvolta i produttori ti annullano la garanzia se solo sfiori la tabella delle partizioni
- Il sistema è un portatile o postazione aziendale: spesso le ditte non vogliono che tu ci installi qualcosa di troppo invasivo
- Non si desidera fare partizioni (qualcuno ha paura di tutti gli strumenti quali Partition Magic, GParted e compagnia)
- Si vuole fare una installazione temporanea di prova
- Altro
Soluzioni
Tutte queste situazioni sono risolvibili con l'utilizzo di una Virtual Machine tipo VMWare, ma questo comunque ci lega a Windows.
La soluzione quì presentata consiste nell'inserire TUTTO il root-filesystem in un singolo bigfile che sarà verrà creato in windows. Il kernel 2.6 ha un supporto del filesystem ntfs che non consente la creazione o eliminazione di file (se ben ricordo tale supporto era presente nel kernel 2.4 ma ne era caldamente sconsigliato l'utilizzo in quanto non era considerabile stabile). Il kernel 2.6, tuttavia, ha un supporto stabile che consente di modificare il contenuto del singolo file a patto di non cambiarne la dimensione. In questo modo trattiamo il nostro rootfs pari ad una partizione (alla quale non cambi la dimensione mentre ci scrivi dentro). Da un po' di tempo esiste anche il progetto ntfs-3g che consente di montare un fs ntfs in lettura/scrittura con supporto totale, e il progetto Linux NTFS, ma entrambi necessitano un sistema running, mentre il supporto ntfs del kernel 2.6 l'abbiamo appunto inside nel kernel e quindi disponibile dal boot.
Passi
Per fare questa installazione dovremo fare i seguenti passi:
- creare il file su cui installare linux (con Windows)
- installare Slackware dentro quel file (con il cd di Slackware)
- configurare il sistema per il boot (con il dvd di Slackware)
- installare il bootloader (con Knoppix)
- rebootare
- pregare ;-)
Facoltativamente possiamo
- Aggiungere la swap
- Aggiungere altri filesystem
Creazione del rootfile
- Avviamo Windows e prendiamo una shell (Start -> Esegui -> cmd) poi diamo i seguenti comandi:
C:> cd \ C:> mkdir LINUX C:> cd LINUX C:> mkdir boot C:> fsutil file createnew rootlinux.img 1000000000
Il file C:\LINUX\rootlinux.img da 1GB è stato creato
C:> dir 17/10/2007 11.06 1.000.000.000 rootlinux.img
Installazione
- Inseriamo il DVD di Slackware e facciamo il boot e montiamo la partizione di Windows
# mkdir /xp # mount /dev/hda1 /xp # dmesg|tail
potrebbero capitare errori tipo:
NTFS-fs error (device hda1): load_system_files(): Volume has unsupported flags set. Mounting read-only. Run chkdsk and mount in Windows.
il che vuol dire che Windows non è stato chiuso correttamente. Abbiamo necessità di riavviare il sistema in windows. Dovrebbe partire il chkdsk in automatico; se non parte diamo il comando:
C:> chkdsk C: /f /l /x
quindi riavviamo. Dopo aver fatto il check dovremo comunque fa ripartire Windows. Dopo aver pulito facciamo ripartire l'installazione di Slackware
# mkdir /xp # mount /dev/hda1 /xp # dmesg|tail NTFS volume version 3.1.
- Prepariamo il rootfilesystem
# losetup /dev/loop0 /xp/LINUX/rootlinux.img # mke2fs -j /dev/loop0 # mount /dev/loop0 /mnt # setup
Partirà l'installer che tanto conosciamo, ma con qualche errore (non ci sono partizioni di linux)...
NO LINUX PARTITION FOUND (ignoriamo il messaggio)
continuiamo con la configurazione normale; al TARGET non ci chiederà per il rootfs ma solo per l'NTFS (che trova). Ricordiamo di NON configurarla; lo faremo a mano a posteriori. All'INSTALL avremo un
CANNOT INSTALL SOFTWARE YET
non gli abbiamo detto dove installare. Dovremo ingannarlo facendogli credere che l'abbiamo specificato. Premiamo ALT+F2
# touch /tmp/SeTnative
ALT+F1 e riscegliamo INSTALL. Alla conf. di lilo scegliamo SIMPLE e ROOT come device. Ovviamente fallirà, però almeno ci ha creato un lilo.conf di base.
Configurare il sistema per il boot
- "Entriamo" dentro la nostra nuova installazione e modifichiamo qualche file quà e là
# chroot /mnt
modofichiamo l'initrd per montare il rootfs come loop-device
$ cd /usr/share/mkinitrd $ mkdir initrd $ cd initrd $ tar zxf ../initrd-tree.tar.gz $ vi init
cercare "# Switch to real root partition:" e aggiungere
mount -t ntfs /dev/hda1 /xp LOOPIMAGE=$(cat /proc/cmdline|sed 's/.*rootimage=\([^ ]*\).*$/\1/') losetup $ROOTDEV /xp/$LOOPIMAGE
sia in fondo, sia prima di "exit 1" aggiungere, per debug:
/bin/sh
e salviamo. Poi
$ mkdir xp $ cp /sbin/losetup bin/ $ cp /lib/ld-linux.so.2 /lib/libc.so.6 lib/ $ mknod dev/loop0 b 7 0 $ mknod dev/loop0 b 3 0 $ mknod dev/loop0 b 3 1 $ mv ../initrd-tree.tar.gz ../initrd-tree.tar.gz-orig $ tar czf ../initrd-tree.tar.gz .
configuriamo lilo
$ cd /etc
$ vi lilo.conf
boot = ?????????? (vedi sotto in 'Scelta posizione per il bootloader')
prompt
timeout = 1200
change-rules
reset
vga = normal
image = /boot/vmlinuz
label = linux
root = /dev/loop0
read-only
initrd=/boot/initrd.gz
append = "rootimage=/LINUX/rootlinux.img"
$ exit
Preparazione del bootloader
Per questa operazione avremo bisogno di accedere in read-write al filesystem ntfs, quindi avremo bisogno di ntfs-3g. Io ho fatto con una Knoppix, ma è possibile farlo con una qualsiasi altra distribuzione live (ormai l'ntfs-3g ce l'hanno tutte, o quasi)
- avviare con knoppix. Consiglio la modalità testo
knoppix 2 lang=it
e montiamo i filesystem
# mkdir /xp # mkdir /slak # mount -t ntfs-3g /dev/hda /xp
potrebbe capitare
Volume is scheduled for check. Please boot into Windows TWICE, or use the 'force' mount option.
nessun problema, possiamo forzarlo tranquillamente senza problemi
# mount -t ntfs-3g -o force /dev/hda1 /xp # mount -o loop /xp/LINUX/rootlinux.img /slak
Aggiungiamo il rootfs in fstab (non l'abbiamo messo in fase di installazione)
# vi /slak/etc/fstab /dev/loop0 / ext3 defaults 1 0
Configuriamo il bootloader
# mkdir /xp/LINUX/boot # rm /boot # ln -s /slak/boot / # chroot /slak $ cd /boot $ mkinitrd -c -f ext2 -r /dev/loop0 $ exit
Scelta della posizione per il bootloader
Ora dovremo installare il bootloader. Prima abbiamo lasciato in sospeso la riga "boot=" di lilo.conf, perchè ancora dobbiamo scegliere la posizione dove sistemare il bootloader.
- MBR
Se stiamo eseguendo tutta la procedura per non perdere la garanzia del nostro portatile, allora abbandoniamo subito l'idea di poterlo mettere nell'mbr.
Se invece non abbiamo una garanzia da salvaguardare, l'mbr è la scelta migliore dove piazzare un lilo. In tal caso dovremo modificare lilo.conf settando la riga boot= e aggiungendo una sezione per il boot di Windows
# vi /slak/etc/lilo.conf
boot = /dev/hda
...
other = /dev/hda1
label=windows
- Floppy
Se abbiamo il problema della garanzia, una scelta facile è quella dell'antico e sottovalutato, ma ancora utile, Floppy.
Prendiamo un floppy (ammesso che ne abbiamo ancora uno in casa) ed inseriamolo. Quindi settiamo il lilo.conf
# vi /slak/etc/lilo.conf boot = /dev/fd0
- Pendrive
Se abbiamo il problema della garanzia per un portatile, però, è molto probabile (al 99,9999%) che questo non possieda un floppy. Allora possiamo ripiegare su una pendrive.
Inseriamo la pendrive e controlliamo come la vede il sistema.
# dmesg|tail
probabilmente vedremo sda o sda+sda1. Per entrambi i casi
# vi /slak/etc/lilo.conf boot = /dev/sda
- Cdrom
Se la nostra macchina non fa il boot da pendrive, la nostra scelta ricade su un cdrom (magari un minicd). Non descrivo quì la procedura per farlo, ma potete prendere il dvd di slackware come modello da cui partire.
- Ntfs
L'idea originale che mi ha spinto a scrivere questo tutorial è partita proprio da quì.
Se, ancora, siamo nella condizione di dover rispettare una garanzia, ma non vogliamo portarci dietro floppy, dischi o pendrive, possiamo aggiungere linux al bootloader di Windows. In questo modo quando questo partirà ci chiederà quale sistema lanciare. Quando sceglieremo Linux, NTLDR (il bootloader di windows) caricherà il nostro lilo.
Ecco cosa faremo: creeremo un file bootsect.b che conterrà quello che dovrebbe contenere il boot-record di un disco/floppy/pendrive. Configureremo windows (file C:\boot.ini) per caricare questo file, il quale richiamerà lilo nel classico modo. In fondo abbiamo l'intera root in un file, perchè non metterci pure il bootsector?
Modifichiamo il boot.ini
# vi /xp/boot.ini C:\bootsect.b="Linux"
Creiamo il boot sector file
# dd if=/dev/zero of=/xp/bootsect.b count=1
e mettiamo il lilo
# vi /slak/etc/lilo.conf boot=/xp/bootsect.b
Installazione del bootloader
Indipendentemante da dove abbiamo scelto di mettere lilo, ora lo installiamo
# cp /slak/boot/{vmlinuz,initrd.gz} /boot
# lilo -C /slak/etc/lilo.conf
Added linux *
Riavvio
- Ora riavviamo il sistema
# umount /slak # umount /xp # reboot
- Prima abbiamo forzato il mount, quindi è buono riavviare windows per forzare un check
- Vi rimando ai vostri vecchi libri di catechismo per la scelta della preghiera da fare.
Fase di Boot
L'installazione è terminata. Mi ci sono volute prove su prove ed esperimenti su esperimenti per concepire questa procedura, ma ora dovrebbe funzionare, e se avete seguito scrupolosamente le istruzioni dovrebbe partire; al massimo potrebbe essere necessario qualche chkdsk da windows. Se non avete eseguito il chkdsk darà un warning nell'initrd e dei fatal durante il tentativo di fsck (v. sotto)
Ma se avete scelto di posizionare il bootloader sull'ntfs, si presenterà con alta probabilità un problema che non avevo tenuto in considerazione prima di iniziare lo sviluppo.
Da quello che ho capito, windows non fa come linux che prima apre il filesystem il sola lettura e dopo in scrittura. Lui lo apre subito in read-write sin da quando deve anche solo leggere il boot.ini. Questo implica che il fs sarà flaggato come 'mounted', e quando il controllo passa a lilo questo flag non sarà resettato.
Durante il boot, nell'initrd al momento del mount /xp, comparirà
NTFS-fs error (device hda1): load_system_files(): Volume has unsupported flags set. Mounting read-only. Run chkdsk and mount in Windows.
e verrà montato in read-only.
Anche se rebooto in windows, quando ricarico lilo la situazione si ripete (fortunatamente questo stato non corrompe il filesystem e il suo contenuto).
Il filesystem è ora in readonly, ma comunque montato, quindi sarà possibile montare correttamente /dev/loop0 in readonly (come ext2), e parte, ma quando rc.S arriva al momento dell'fsck, questo non si aspetta di avere sotto un altro filesystem sotto a /dev/loop0, e visto che è readonly non riuscità ad aprire la root in readwrite, tanto più che è journaled (è ext3). Comincerà a dare montagne di errori e saremo costretti a resettare il computer.
A questo non ho ancora trovato la soluzione. Sto cercando un work-around. Se qualcuno ha idee sono felice di ascoltarle.
Prossimi Passi
Il tutorial non è ancora terminato. I prossimi passi, dopo la correzione di questo bug, saranno:
- mettere la swap
- installare ntfs-3g e ntfsprogs (d'obbligo, visto che abbiamo un ntfs come padre)
- aggiunta di altri filesystem