Saturday, July 3, 2010

Dual Boot Win7 + FreeBSD και χαζοί περιορισμοί της MS

Όχι δεν αλλαξοπίστησα για τα Windows 7! Απλώς θα χρειαστώ ένα μηχάνημα σχετικά φορητό αυτές τις μέρες για να καθαρίσω μερικούς ιούς από άλλα μηχανήματα (συνδέοντας πάνω τους δίσκους τους). Έχω ένα ωραίο atom σε mini-itx κουτί, το οποίο πραγματικά περισσεύει και έτσι είναι για πειράματα και τέτοιους είδους εργασίες. Χωράει άνετα στο backpack μου και μεταφέρεται παντού.
Το μηχάνημα αυτό είχε μέχρι στιγμής FreeBSD (τι παράξενο...) και αποφάσισα ότι είναι το κατάλληλο να βάλω windows για τον παραπάνω σκοπό.

Ξεκίνησα το FreeBSD σε single user mode, προσάρτησα τον εξωτερικό μου δίσκο:

mount /dev/da0s2d /mnt

και μερικά γρήγορα dumps αποθήκευσαν το σύστημα μου:

cd /mnt
dump -0 -au -h0 -f rootfs.dump /
dump -0 -au -h0 -f varfs.dump /var
dump -0 -au -h0 -f usrfs.dump /usr

So far so good. Έσβησα τα πάντα, εγκατέστησα τα windows, χωριστό partition για το λειτουργικό και για τα δεδομένα (που δεν πρόκειται να υπάρξουν ποτέ, αλλά δεν πειράζει) και εγκατέστησα ότι θα χρειαστώ. Όταν έμεινα ικανοποιημένος από την εγκατάσταση, αποφάσισα να ξαναβάλω και το FreeBSD στον υπόλοιπο δίσκο (τεράστιος για πειράματα, 500Gb).

To θέμα είναι πως θα επιλέγω μεταξύ λειτουργικών. Παλιότερα (στα Vista) είχα χρησιμοποιήσει σε αντίστοιχες περιπτώσεις με μεγάλη επιτυχία το πρόγραμμα EasyBCD. Αλλά σήμερα αποφάσισα να ακολουθήσω μια άλλη τακτική: Θα χρησιμοποιούσα το fdisk στο FreeBSD και το Computer Management / Disk Administrator από τα Windows για να κάνω κάθε φορά active το partition του λειτουργικού που επιθυμώ. Όπως είναι γνωστό τα Windows θα χρησιμοποιήσουν το MBR ενώ στο FreeBSD μπορώ σίγουρα να πω να μην το πειράξει. Μια χαρά μέχρι εδώ.

Boot λοιπόν με το LiveFS του FreeBSD, δημιουργία του slice από το fdisk του sysinstall με Leave the MBR untouched και έξοδος στο fixit. Εδώ φτιάχνω τα partitions με την bsdlabel:

bsdlabel -w /dev/ad4s4

Επεξεργασία με το χέρι:

bsdlabel -e /dev/ad4s4

Εγκατάσταση boot blocks:

bsdlabel -B /dev/ad4s4

Newfs στα partitions:

newfs /dev/ad4s4a
newfs -U /dev/ad4s4d
newfs -U /dev/ad4s4e
newfs -U /dev/ad4s4f

Mount στον εξωτερικό δίσκο:

mkdir /disk
mount /dev/da0s2d /disk

Και restore τα partitions:
mount /dev/ad4s4a /mnt
cd /mnt
TMPDIR=/mnt restore -rvf /disk/rootfs.dump

Πριν την αποπροσάρτηση, χρειάζεται μια μικρή διόρθωση στο /mnt/etc/fstab καθώς το slice έχει αλλάξει. Αυτό έγινε με το vi.

cd /
umount /mnt
mount /dev/ad4s4d /mnt
cd /mnt
TMPDIR=/mnt restore -rvf /disk/varfs.dump
cd /
umount /mnt
mount /dev/ad4s4f /mnt
cd /mnt
TMPDIR=/mnt restore -rvf /disk/usrfs.dump

Με την ολοκλήρωση της διαδικασίας, το slice του FreeBSD είναι ήδη active (από την fdisk του sysinstall), οπότε έξοδος από το fixit, επανεκκίνηση και σύντομα θα είμαστε στην κονσόλα του FreeBSD. Πρέπει μόνο να θυμηθούμε να φτιάξουμε το sticky bit στο /tmp και /var/tmp:

chmod -R 1777 /tmp /var/tmp

Ωρα να ξεκινήσουμε ξανά τα Windows. Χρησιμοποιούμε την fdisk για να αλλάξουμε το active partition στο 1.

sysctl kern.geom.debugflags=16
fdisk -a /dev/ad4

Επανεκκίνηση και είμαστε στα Windows. Είμαστε έτοιμοι να κάνουμε ξανά την αλλαγή του active partition για να γυρίσουμε στο FreeBSD. Control Panel, Computer Management, Administrative Tool, Disk Administrator - με δεξί κλικ και Run as Administrator για να είμαστε σίγουροι ότι δεν θα πεταχτεί κανένα UAC από πουθενά. Και να η εικόνα που θα δούμε:



Όλα καλά θα πείτε. Για δοκιμάστε όμως να κάνετε ενεργό το partition του FreeBSD:



Healthy, primary partition, αλλά όχι κύριε δεν θα το κάνετε active. Οι εντολές είναι ανενεργές. Γιατί φοβόμαστε ότι δεν ξέρετε τι κάνετε αν και το εργαλείο βρίσκεται στα Administrative Tools. Και για να παραφράσω, αγαπητή MS αν πιστεύεις ότι τα εργαλεία διαχείρισης είναι για χαζούς Administrators, μόνο χαζοί Administrators θα τα χρησιμοποιούν. Ή μάλλον, μόνο χαζοί γενικώς.

Και για να είστε σίγουροι ότι το εργαλείο είναι επίτηδες crippled, το παραπάνω γίνεται μια χαρά από τη γραμμή εντολών. All Programs -> Accessories -> Command prompt (δεξί κλικ, Run as Administrator):

diskpart

DISKPART> select disk=0
Disk 0 is now the selected disk
DISKPART> list partition
(...list of partitions... το FreeBSD είναι το 4)
DISKPART> select partition=4
Partition 4 is now the selected partition
DISKPART> active
DiskPart marked the current partition as active

Reboot, και είμαστε πίσω στο FreeBSD. Τουλάχιστον εκεί δεν γράφεις 100 εντολές για να κάνεις active ένα slice. Και το σύστημα δεν θεωρεί τους administrators ηλίθιους!