Nicholas Christopoulos Personal Site
Οδηγός επισκευών για linux
Category: Article
License: GNU FDL (https://www.gnu.org/licenses/fdl.html)
Οδηγός επισκευών για linux
Νικόλας Χριστόπουλος
Έκδοση 1.4, Ιούλ 2017 - Ιουν 2019
Μερικές φορές είτε γιατί αλλάξαμε δίσκο, είτε γιατί κάναμε εγκατάσταση σε άλλο διαμέρισμα άλλο λειτουργικό σύστημα, είτε γιατί έπεσε το ρεύμα την ώρα που έγγραφε ο δίσκος, είτε γιατί απλά έτυχε να παρουσιάσει βλάβη ο δίσκος, χρειάζεται να επισκευάσουμε τον δίσκο ή/και την εκκίνηση (boot) του συστήματός μας.


«στο linux δεν χρειάζεται ποτέ να κάνετε εγκατάσταση ξανά»

* Για να πάρετε το κείμενο σε μορφή PDF, απλά πατήστε εκτύπωση στο μενού του browser και επιλέξτε PDF file. Είναι ήδη προετοιμασμένο να μορφοποιηθεί ανάλογα.
* Ο οδηγός αυτός είναι κάπως μεγάλος γιατί πιάνει τον χρήστη από το επίπεδο μηδέν, οι περισσότεροι δεν θα θα χρειαστείτε παρά μόνο τις επιμέρους ενότητες ή τα Παραρτήματα.

Εισαγωγή

Λίγα λόγια για αυτό το κείμενο

Ο οδηγός αυτός ισχύει για όλα τα λειτουργικά συστήματα. Κάθε ένα κάνει τα ίδια πράγματα με διαφορετικό τρόπο ή δεν έχει καθόλου αυτή την δυνατότητα. Το DOS για παράδειγμα δεν υποστηρίζει - τουλάχιστον από μόνο του - δικτύωση. Άλλα όπως τα Windows προσπαθούν να εξομοιώσουν το Unix και έτσι βλέπουμε πολλές εντολές ίδιες, όπως το tracert (traceroute), το route και το ipconfig (ifconfig).

Εδώ θα ασχοληθούμε μόνο με το Linux, και θα προτιμήσουμε προγράμματα είτε του κλασσικού (POSIX) Unix, είτε της GNU. Παρόλα αυτά με τις ίδιες γνώσεις μπορούμε να διορθώσουμε δίσκους και δίκτυα Windows, Mac, DOS και Android.

Λίγα λόγια για τους δίσκους

Δίσκους τους λέμε λόγο παράδοσης μιας και από το 1970 οι εύκαμπτοι δίσκοι (floppy disks) και αργότερα οι σκληροί δίσκοι (hard disks) ήταν δίσκοι που αντικατέστησαν τις μαγνητοταινίες (tapes). Αυτό όμως που εννοούμε είναι η συσκευή αποθηκευτικού χώρου που:

  1. χρησιμοποιείται για την αποθήκευση δεδομένων και προγραμμάτων.
  2. διατηρεί τα δεδομένα της ακόμα και αν την αποσυνδέσουμε από το ηλεκτρικό ρεύμα.
  3. είναι τυχαίας προσπέλασης, δηλαδή μπορούμε να ζητήσουμε να φορτώσουμε ένα συγκεκριμένο τμήμα μόνο χωρίς να χρειαστεί να προσπελάσουμε όλο το μέσο μέχρι να φτάσουμε σ' αυτό όπως γινόταν με τις μαγνητικές ταινίες.
Υπάρχουν διάφορες τεχνολογίες τέτοιων συσκευών με πλέον συνηθισμένες:

Ο κάθε δίσκος χωρίζεται σε sectors, δηλαδή τμήματα. Αυτά τα τμήματα κατά παράδοση είναι - ή εννοούμε ότι είναι - των 512 bytes. Στην πραγματικότητα ανάλογα την τεχνολογία τους και το κύκλωμα λειτουργίας χωρίζονται σε διάφορα πράγματα που δεν μας ενδιαφέρουν.

Τον κάθε δίσκο μπορούμε να τον διαιρέσουμε σε περιοχές που τις ονομάζουμε διαμερίσματα (partitions). Σε κάθε δίσκο τα πρώτα 512 bytes είναι το λεγόμενο boot sector. Εκεί αποθηκεύεται ένας υποτυπώδης κώδικας εκκίνησης του λειτουργικού συστήματος (boot loader), και η περιγραφή μέχρι τεσσάρων διαμερισμάτων (partitions).

Αυτή είναι η δομή όπως χρησιμοποιείται στις περισσότερες των περιπτώσεων σήμερα· τυπικά λέγετε MBR ή δομή DOS. Δεν είναι πάντα έτσι, αλλά δεν μας χρειάζεται και να ξέρουμε τις άλλες περιπτώσεις, με εξαίρεση δίσκους με χωρητικότητα μεγαλύτερη των 2TB (βλ. Παραρτήματα: GPT).

Λίγα λόγια για τα συστήματα αρχείων

Κάθε διαμέρισμα πρέπει να το μορφοποιήσουμε (format) με ένα σύστημα αρχείων (file system) ώστε να μπορεί να χρησιμοποιηθεί από το λειτουργικό σύστημα. Κάθε είδος συστήματος αρχείων είναι μια συγκεκριμένη τεχνολογία διαχείρισης αρχείων με συγκεκριμένα χαρακτηριστικά, που άλλοτε μας προσφέρουν καλύτερες ταχύτητες ανάγνωσης, άλλοτε ασφαλέστερες εγγραφές και επισκευές, άλλοτε καλύτερη διαχείριση της τεχνολογίας του αποθηκευτικού μας μέσου κ.α.

Τα πλέον συνηθισμένα συστήματα αρχείων είναι:

Πληροφορίες συστήματος

Το Linux περιλαμβάνει πολύ περισσότερα πιο εξειδικευμένα εργαλεία όπως τα iostat και memusage, τα οποία δεν χρειάζεται να τα περιγράψουμε εδώ.

Το αρχείο fstab

Το αρχείο /etc/fstab χρησιμοποιείται κατά την εκκίνηση - και όχι μόνο - για να δηλώσει τα συστήματα αρχείων με τις (default) παραμέτρους τους, το σημείο που θα προσαρτηθούν (mountpoint) την σειρά που θα προσαρτηθούν και το αν θα ελεγχθούν για σφάλματα πιο πριν.

Πίνακας στοιχείων του fstab
#ΣτήληΠεριγραφή
1Συσκευή Το όνομα του διαμερίσματος π.χ. /dev/sda1 ή η ετικέτα του LABEL=name ή το ID του UUID=id, δική μας επιλογή.
2Mount-point Σημείο προσάρτησης δηλαδή ο κατάλογος που θα το βλέπουμε. Το / για το βασικό σύστημα αρχείων.
3Τύπος Το είδος του συστήματος αρχείων, π.χ. ext4, ntfs, vfat, etc.
4Παράμετροι Οι παράμετροι που θα δίναμε και στο mount, διαχωρισμένοι με κόμμα π.χ. noauto για να μην γίνεται αυτόματα προσάρτηση κατά την εκκίνηση.
5Έλεγχος 1 για να ελεγχθεί για σφάλματα πριν γίνει η προσάρτηση· αλλιώς 0.
6Προτεραιότητα Πρώτα θα γίνει προσάρτηση αυτά που έχουν 1 μετά αυτά που έχουν 2 κ.ο.κ. το 0 σημαίνει όποτε το χρειαστεί το σύστημα, κάποια στιγμή κατά την εκκίνηση.

Παράδειγμα:

# my root file-system
LABEL=ROOTFS /     ext4 defaults,lazytime,relatime,data=writeback 1 1
# a swap partition
LABEL=SWAP   none     swap   auto,sw        0 0
# kernel's stuff
devpts       /dev/pts devpts gid=5,mode=620 0 0
proc         /proc    proc   defaults       0 0
tmpfs        /dev/shm tmpfs  defaults       0 0
# the default CD-ROM
/dev/sr0     /media/cdrom auto noauto,users,ro 0 0

Περισσότερα εδώ.

Προσάρτηση NTFS/FAT με ελληνικά ονόματα

Το Linux λογικά θα προσπαθήσει να βρει την σωστή κωδικοποίηση των ελληνικών, αυτό δεν σημαίνει και ότι θα τα καταφέρει. Μπορούμε όμως να δώσουμε εμείς τι κωδικοποίηση να χρησιμοποιήσει σε παράμετρο του mount.

Με UTF-8

# mount -t ntfs /dev/sdxx /mnt/windows \
	-o utf8,defaults

Με ISO-8859-7 (Windows-1253), είναι πιθανόν να πρέπει να φορτώσουμε ένα module πρώτα, αν αυτό παρουσιάσει μήνυμα λάθους δεν υπάρχει πρόβλημα, μπορεί να είναι static linked ή να το έχει ήδη φορτώσει.

# modprobe nls_iso8859-7
# mount -t ntfs /dev/sdxx /mnt/windows \
	-o nls=iso8859-7,defaults

Ειδικά για FAT, θα πρέπει να προσθέσουμε και το codepage για τα short-filenames (8.3), το οποίο δεν είναι άλλο από το 737.

# mount -t vfat /dev/sdxx /mnt/windows \
	-o iocharset=iso8859-7,codepage=737,defaults

Στο εγχειρίδιο του mount (man mount) αναφέρει αναλυτικά για κάθε σύστημα αρχείων τι παραμέτρους παίρνει, θα σας είναι πολύ χρήσιμο.

Περισσότερα εδώ

Προετοιμασία

Θα χρειαστούμε να έχουμε ένα σύστημα που να λειτουργεί από USB stick ή CD/DVD. Αυτά τα συστήματα ονομάζονται live, π.χ. slackware live CD, είναι ένα CD το οποίο μπορεί να ξεκινάει και να τρέχει το slackware από το CD σαν να το είχαμε κάνει εγκατάσταση σε κάποιον σκληρό δίσκο.

Σχεδόν όλες οι διανομές προσφέρουν ένα τέτοιο. Προτιμήστε μιας διανομής που είτε είναι για τέτοιες εργασίες (επισκευής) είτε είναι πιο εξειδικευμένη. Κατά πάσα περίπτωση το αρχείο που θα κατεβάσουμε θα πρέπει να το κάψουμε σε ένα CD ή DVD. Αυτά τα αρχεία ονομάζονται CD ή DVD Image, δηλαδή εικόνα, πλήρες αντίγραφο, του CD ή DVD, και έχουν κατάληξη iso που βγήκε από το πρότυπο ISO-9660 που χρησιμοποιείται για τα CDs.

Το σύστημα που θα χρησιμοποιήσουμε θα πρέπει να είναι ίδιας αρχιτεκτονικής (π.χ. amd64 ή i386) με το σύστημα που θέλουμε να επισκευάσουμε. Αν δεν ξέρετε τι έχετε, δοκιμάστε amd64 η οποία μπορεί να αναφέρεται και ως x86_64, είναι το ίδιο πράγμα.

Ορίστε μερικά

Προσωπικά δεν έχει τύχει ποτέ να χρειαστώ κάτι παραπάνω από το CD εγκατάστασης του Slackware…

Στην πραγματικότητα οποιαδήποτε διανομή μας κάνει, όμως για αυτές που βασίζονται στο ubuntu (όπως το mint) θα πρέπει ξέρουμε να πάρουμε δικαιώματα διαχειριστή (root) πριν αρχίσουμε τις επισκευές. Δεν θα αναφέρω εδώ τα απαραίτητα sudo γι αυτές τις περιπτώσεις. Πηγαίνουμε να επισκευάσουμε το σύστημα είναι αυτονόητο ότι πρέπει να λειτουργούμε με τον λογαριασμό του διαχειριστή. Κατά κανόνα δίνοντας την εντολή sudo su θα πρέπει να συνδεθείτε σαν root (διαχειριστής). Στον ιστότοπο της διανομής θα πρέπει να αναφέρει πως θα συνδεθείτε σαν διαχειριστής.

Πρώτη μας δουλειά λοιπόν είναι να δημιουργήσουμε ένα δίσκο εκκίνησης με όλα τα απαραίτητα εργαλεία για τις επισκευές. Αυτός ο δίσκος όπως είπαμε μπορεί να είναι ένα USB stick ή ένα CD/DVD. Σε περίπτωση που προτιμάμε ένα live CD αλλά να γραφτεί σε USB stick, είναι δυνατόν να γίνει είτε χρησιμοποιώντας το πολύ καλό unetbootin, είτε με απλό dd εφόσον ξέρουμε τι κάνει. π.χ.

# dd if=livecd.iso of=/dev/usb-disk bs=4M

Σημείωση
Θα είναι έξυπνο να έχετε πάντα ένα τέτοιο σύστημα έτοιμο για κάθε περίπτωση· άλλωστε σήμερα ένα memory stick των 8GB κοστίζει κάτω από 5€ και δύσκολα θα χρειαστείτε μεγαλύτερο μέγεθος. Προτιμήστε να είναι για USB3 κάτι που έχει σημαντικά αυξημένη ταχύτητα.

Επισκευή συστήματος αρχείων
ή/και boot sector

1. Το επόμενο βήμα είναι να ρυθμίσουμε το BIOS (Basic Input Output System) να ξεκινάει από το δίσκο που προετοιμάσαμε. Αυτή η διαδικασία δυστυχώς δεν είναι ίδια σε κάθε BIOS, παρόλα αυτά είναι παρόμοια παντού.

Όταν ξεκινάμε τον υπολογιστή το πρώτο πρόγραμμα που τρέχει είναι στο BIOS το οποίο και προετοιμάζει το υπολογιστικό σύστημα για να φορτώσει το λειτουργικό σύστημα που έχουμε εγκαταστήσει στον υπολογιστή μας. Όταν ξεκινάει το BIOS εμφανίζει στην οθόνη διάφορες πληροφορίες μαζί όμως με κάποια πλήκτρα για να μπορέσουμε να το ρυθμίσουμε ή/και για να επιλέξουμε την συσκευή εκκίνησης, δηλαδή από που θα φορτώσει το λειτουργικό σύστημα. Αυτά τα πλήκτρα διαφέρουν από BIOS σε BIOS. Συνήθως επιλέγουν το DEL ή το F2, αλλά όπως είπαμε θα το εμφανίσει το σύστημα όταν ξεκινάει.

Ξεκινάμε λοιπόν τον υπολογιστή και πάμε στις ρυθμίσεις του BIOS. Εκεί πρέπει να έχει ένα μενού BOOT και από κάτω τις συσκευές με σειρά προτεραιότητας. Φροντίζουμε το USB stick ή το CD/DVD (ανάλογα τι δίσκο έχουμε φτιάξει) να βρίσκεται στην κορυφή, πρώτο. Σώζουμε τις αλλαγές (συνήθως με το πλήκτρο F10), και κάνουμε επανεκκίνηση με το CD μέσα στο drive ή το USB stick συνδεδεμένο.

2. Επισκευή του συστήματος αρχείων (filesystem). Εφόσον ξεκινήσαμε με το live σύστημα, τρέχουμε ένα εξομοιωτή τερματικού όπως το xterm, το urxvt, konsole, xfce4-terminal κλπ. Πρώτη μας δουλειά είναι να βρούμε τους δίσκους και τα partitions τους αν δεν τα ξέρουμε ήδη. Αυτό μπορεί να γίνει με το πρόγραμμα lsblk.

# lsblk

NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 111,8G  0 disk
└─sda1   8:1    0 111,8G  0 part /
sdb      8:16   0   3,7T  0 disk
├─sdb1   8:17   0   3,6T  0 part /ext
├─sdb2   8:18   0     8G  0 part [SWAP]
├─sdb4   8:20   0   256M  0 part
├─sdb5   8:21   0   512M  0 part
└─sdb6   8:22   0   256M  0 part
sr0     11:0    1  1024M  0 rom

Βλέπουμε ότι το σύστημα μας είναι στο /dev/sda1 (mountpoint /) ενώ έχουμε προσαρτήσει και το /dev/sdb1 στον κατάλογο /ext.

Η ονοματολογία των συσκευών στο Linux είναι πολύ απλή έστω και αν στην αρχή μας φαίνεται μπέρδεμα. Το /dev είναι ο κατάλογος με τα ονόματα των συσκευών του υπολογιστικού μας συστήματος. Το sd σημαίνει SCSI (Small Computer System Interface) DISK, ενώ για (E)IDE ((Enhanced) Integrated Drive Electronics) θα ήταν hd (HARD DISK). Μπορεί ο δίσκος μας να μην είναι SCSI αλλά έτσι τον βλέπει το kernel γιατί υπάγεται στον ίδιο οδηγό δίσκων. Ακολουθεί το γράμμα του δίσκου με αύξουσα σειρά και μετά ο αριθμός του partition. Έτσι η συσκευή /dev/sdd3 σημαίνει το 3ο partition του 4ου δίσκου - με βάση την σειρά που τα αναφέρει το BIOS, κατά κανόνα ακριβώς με την σειρά που τα συνδέουμε στη μητρική πλακέτα.

Προσέχουμε οι συσκευές να μην έχουν προσαρτηθεί (mount) στο σύστημα. Αυτό το βλέπουμε στην στήλη mountpoint. Αν ισχύει, αποσυνδέουμε τις συσκευές από το λειτουργικό σύστημα πριν εκτελέσουμε τον έλεγχο του συστήματος αρχείων με την εντολή umount η οποία παίρνει παράμετρο το mountpoint ή το όνομα της συσκευής.

# umount /dev/sdb1

Τρέχουμε το fsck. Είναι το πρόγραμμα το οποίο ελέγχει το σύστημα αρχείων για σφάλματα. Παίρνει παράμετρο το όνομα της συσκευής (στην περίπτωσή μας το partition) που θέλουμε να διορθώσουμε ή απλά να το ελέγξουμε. Τέλος, η παράμετρος -a λέει στο fsck να κάνει αυτόματη διόρθωση αν και εφόσον βρεθεί σφάλμα.

# fsck -a /dev/sdb1

fsck from util-linux 2.30
e2fsck 1.43.4 (31-Jan-2017)
ROOTFS4TB: clean, 3206268/243605504 files, 266816021/974395134 blocks

3. Επισκευή του boot sector. Μέχρι τώρα έχουμε ξεκινήσει από ένα live σύστημα και έχουμε ελέγξει την κατάσταση των συστημάτων αρχείων. Τώρα θα προχωρήσουμε στο να ενημερώσουμε την εκκίνηση του συστήματος.

Όπως είδαμε όταν ανοίγουμε τον υπολογιστή, αυτός εκτελεί το πρόγραμμα του BIOS το οποίο βρίσκεται στην ROM (Read-Only Memory), δηλαδή σε ένα ολοκληρωμένο κύκλωμα μέσα στην μητρική πλακέτα, και αυτό προετοιμάζει το σύστημα για να φορτώσει το λειτουργικό σύστημα. Στην πραγματικότητα το BIOS απλά φορτώνει τα 512 πρώτα bytes του πρώτου δίσκου και τα εκτελεί. Αυτά τα πρώτα 512 bytes λέγονται boot sector ή αλλιώς MBR (Master Boot Record) και μέσα εκεί εκτός από ένα υποτυπώδη κώδικα εκκίνησης του λειτουργικού που ονομάζεται boot loader (τα πρώτα 446 bytes), εμπεριέχεται και ο πίνακας των partitions, γνωστό ως partition table (τα επόμενα 96 bytes).

Πρώτη μας εργασία είναι να προσαρτήσουμε το σύστημα των αρχείο σε ένα κατάλογο. Στο παράδειγμά μας το /dev/sda1 είναι το κύριο partition του λειτουργικού μας συστήματος και το συνδέουμε στον κατάλογο /mnt του live disk.

# mount /dev/sda1 /mnt

Το επόμενο βήμα είναι να προσαρτήσουμε τους καταλόγους του linux πυρήνα, οι οποίοι περιέχουν απαραίτητες πληροφορίες για τους δίσκους και όχι μόνο, μέσα στον ίδιο κατάλογο /mnt στις σωστές θέσεις.

# mount --bind /dev /mnt/dev
# mount --bind /sys /mnt/sys
# mount --bind /proc /mnt/proc

Αλλάζουμε τον κεντρικό κατάλογο του συστήματός μας στο /mnt με το chroot. Αυτό το πρόγραμμα μας επιτρέπει να λειτουργούμε πια μέσα στο /dev/sda1 σαν να είχαμε εκκινήσει τον υπολογιστή από εκεί.

# chroot /mnt

Αν έχουμε προσθέσει, αφαιρέσει ή αλλάξει δίσκους ή/και partition εκκίνησης, πρέπει πρώτα να ενημερώσουμε το lilo ή το grub για αυτό. Για το grub απλά τρέχουμε το πρόγραμμα update-grub2. Για το lilo ενημερώνουμε το αρχείο /etc/lilo.conf.

Και τώρα πια ήρθε η ώρα να ενημερώσουμε το boot sector όπως θα κάναμε σε αλλαγή του πυρήνα ή σε νέα εγκατάσταση. Αυτό γίνετε ανάλογα τον boot manager που χρησιμοποιούμε που συνήθως είναι κατά κανόνα το lilo ή το grub για ubuntu based διανομές.

# lilo
ή
# grub-install /dev/sda

Επαναφέρουμε το σύστημα όπως ήταν και επανεκκινούμε (restart) τον υπολογιστή.

# exit
# umount /mnt/proc
# umount /mnt/sys
# umount /mnt/dev
# umount /mnt
# reboot

Μεταφορά του συστήματός μας σε νέο δίσκο

Υπάρχουν πολλές μέθοδοι για να γίνει αυτό, εδώ θα περιγράψουμε την απλούστερη, copy! Ξεκινάμε το σύστημά μας κανονικά με συνδεδεμένο τον νέο δίσκο σε μια δεύτερη θέση, για το παράδειγμά μας θα είναι στο /dev/sdb.

Σημείωση
Το πρόγραμμα parted που χρησιμοποιούμε παρακάτω, έχει και GUI έκδοση που θα είναι πολύ φιλικότερη για τους περισσότερους χρήστες, το gparted. Προσωπικά προτιμώ να εργάζομαι με το cfdisk.

  1. Δημιουργία τυπικού MBR με ένα partition για όλο τον δίσκο:

    Τρέχουμε το πρόγραμμα parted με παράμετρο τον νέο δίσκο (/dev/sdb).

    # parted /dev/sdb
    

    Δημιουργούμε ένα τυπικό MBR (msdos)

    (parted) mktable msdos
    

    Σημείωση
    Εάν θέλουμε GPT partition table, εδώ θα πρέπει να δώσουμε mktable gpt.

    και ενός διαμερίσματος που καταλαμβάνει όλο τον δίσκο.

    (parted) mkpart p ext4 16 100%
    

    Σημείωση
    Εάν θέλουμε UEFI σύστημα, θα πρέπει ήδη να έχουμε δημιουργήσει GPT partition talbe και εδώ θα πρέπει να δημιουργήσουμε δύο διαμερίσματα. Το πρώτο με μέγεθος 500MB, με σύστημα FAT32 και ενεργοποιημένα τα flags boot ϰ esp. Αυτό θα πρέπει αργότερα να προσαρτηθεί στον κατάλογο /boot/efi, όπου το grub θα εγκαταστήσει τα απαραίτητα αρχεία για την υποστήριξη του UEFI. Το δεύτερο με όλο το υπόλοιπο μέγεθος του δίσκου και σύστημα ext4 φυσικά.

    Σημειώνουμε το νέο partition σαν partition εκκίνησης

    (parted) set 1 boot on
    

    και βγαίνουμε από το parted

    (parted) quit
    

    Μόλις δημιουργήσαμε το διαμέρισμα /dev/sdb1. Το lsblk θα πρέπει να το αναφέρει.

  2. Μορφοποίηση (φορμάρισμα) του νέου διαμερίσματος
    # mkfs -t ext4 /dev/sdb1
    

    Ο νέος δίσκος είναι έτοιμος να δεχτεί δεδομένα πια…

    Σημείωση
    Στα MBR συστήματα να αφήνετε μερικά MB (1-64MB) πριν την αρχή του πρώτου διαμερίσματος ώστε να υπάρχει αρκετός χώρος ελεύθερος για να αποθηκεύσει το boot loader πρόσθετα στοιχεία αν χρειαστεί (stage 1.5 ή/και stage 2 του GRUB, vmlinuz+initramfs για άλλα). Αυτός ο χώρος συνήθως δημιουργήται εξ ορισμού (1 MB - 512 B) και λέγετε MBR gap, για το GRUB δεν χρειάζεται παραπάνω χώρος από αυτόν. Δεν υπάρχει σε συστήματα GPT, και θα πρέπει να αντικατασταθεί με το bios-boot partition αν και εφόσον θα θελήσουμε να γίνετε boot με κλασικό BIOS. Το bios-boot partition πρέπει να είναι σε χώρο κάτω των 2TB.

  3. Αντιγραφή του συστήματος μας στον νέο δίσκο
    # mkdir /mnt/newdisk
    # mount /dev/sdb1 /mnt/newdisk
    # cp -axfv / /mnt/newdisk
    

    Η παράμετρος -x στο cp αναλαμβάνει να μην αντιγράψει τους προσαρτημένους καταλόγους, ενώ η παράμετρος -a να αντιγράψει όλα τα χαρακτηριστικά των αρχείων και καταλόγων.

    Στην πραγματικότητα εάν το σύστημά σας είναι ένας διακομιστής (server) θα έπρεπε να μπείτε σε χρήση single user πριν εκτελέσετε το cp (copy) με telinit 1, αλλά για ένα desktop PC δεν χρειάζεται. Μπορείτε να παίξετε το tuxkart ή το pingus όσο περιμένετε…

  4. Ενημέρωση του /mnt/newdisk/etc/fstab αν χρειάζεται… Αν το παλιό μας σύστημα ήταν στο /dev/sda1 δεν χρειάζεται να αλλάξουμε τίποτα, εκτός ίσως αν είχαμε και swap partition στο παλιό δίσκο, οπότε και θα πρέπει να το διαγράψουμε από το fstab.
  5. Αποπροσάρτιση του δίσκου και κλείσιμο του υπολογιστή για κατσαβίδιασμα…
    # umount /mnt/newdisk
    # halt
    
  6. Αλλαγή δίσκων hardware. Κλείνουμε τον υπολογιστή, αποσυνδέουμε τον πρώτο μας δίσκο και συνδέουμε τον δεύτερο στην θέση του. Τον παλιό πια δίσκο μπορούμε να τον συνδέσουμε σαν δεύτερο αν θέλουμε, αλλά δεν μας χρειάζεται πλέον.
  7. Εκκίνηση από το live σύστημα.
  8. Επισκευή του boot sector ακριβώς όπως αναφέραμε στην προηγούμενη ενότητα (βλέπε III.3). Αν το παλιό μας σύστημα ήταν στο /dev/sda1 δεν χρειάζεται να ενημερώσουμε το lilo.conf.
  9. Επανεκκίνηση και ορίστε στον νέο μας δίσκο χωρίς να έχει αλλάξει τίποτα.

Αλλαγή διανομής

Στο Linux μπορούμε εύκολα επίσης να αλλάξουμε διανομή χωρίς να χάσουμε τίποτα σχεδόν από ότι έχουμε ήδη. Αυτό όμως είναι μια κάπως περίπλοκη διαδικασία. Σε κάθε διανομή οι λογαριασμοί χρηστών (daemons και χρήστες) όπως και οι ομάδες έχουν διαφορετικά IDs.

Για τα παραδείγματά μας, το όνομα του χρήστη μας είναι nicholas και η κύρια ομάδα του χρήστη nicgrp. Το πρόγραμμα id μπορεί να μας πει σε τι IDs αντιστοιχούν.

$ id
uid=1000(nicholas) gid=1000(nicgrp) groups=1000(nicgrp),100(users)

Ένας τρόπος είναι να πάρουμε αντίγραφο τον προσωπικό μας φάκελο (home directory), μαζί με όλους τους φακέλους που εμπεριέχει φυσικά, με τα tar/gzip. Τα δύο προγράμματα αυτά μας επιτρέπουν να πάρουμε πλήρες αντίγραφο των φακέλων και αρχείων με όλες τους τις ιδιότητες, και να τα αποθηκεύσουμε σε ένα συμπιεσμένο αρχείο - πακέτο. Ένα αρχείο δηλαδή που εμπεριέχει άλλα αρχεία μέσα του. Έτσι στο παρακάτω παράδειγμα παίρνουμε όλο τον φάκελο /home/nicholas στο αρχείο - πακέτο home-nicholas.tar.gz.

# tar -cvpzf /tmp/home-nicholas.tar.gz /home/nicholas/

Το μετακινούμε σε μια αφαιρούμενη μονάδα όπως ένα USB memory stick (/dev/sdd στο παράδειγμα), γιατί κατά την νέα εγκατάσταση είναι πολύ πιθανόν να σβηστεί.

# mkdir /mnt/stick
# mount /dev/sdd /mnt/stick
# mv /tmp/home-nicholas.tar.gz /mnt/stick
# umount /mnt/stick

Τώρα κάνουμε εγκατάσταση την νέα διανομή.

Όταν τελειώσουμε, μπορούμε να αποσυμπιέσουμε το αρχείο μας και να βάλει όλα τα προσωπικά μας αρχεία στην παλιά τους θέση, όπως ήταν πριν την νέα εγκατάσταση.

# mkdir /mnt/stick
# mount /dev/sdd /mnt/stick
# tar -xvzf /mnt/stick/home-nicholas.tar.gz -C /
# umount /mnt/stick

Θα πρέπει επίσης να ενημερώσουμε το αρχεία μας με τα νέα UID και GID που δημιουργήσαμε κατά την εγκατάσταση αν και εφόσον είναι διαφορετικά.

# chmod -R nicholas:nicgrp /home/nicholas

Αν κατά την νέα εγκατάσταση αλλάξαμε και το username μας (δεν μας λένε πια nicholas, αλλά π.χ. maria) θα πρέπει να μετακινήσουμε και τον προσωπικό μας κατάλογο σε αντίστοιχη θέση. Σε αυτή την περίπτωση μην ξεχάσετε να αλλάξετε και τα IDs.

# mv /home/nicholas /home/maria
# chmod -R maria:maria /home/maria

Δίσκοι με κατεστραμμένα τμήματα

Bad sectors (κατεστραμμένα τμήματα) λέγονται τα κατεστραμμένα τμήματα ενός δίσκου. Είναι μια φυσική καταστροφή, όχι λογική όπως είναι ένα σύστημα αρχείων που παρουσίασε σφάλματα γιατί έπεσε το ρεύμα, δεν διορθώνεται. Μπορούμε όμως να τα σημειώσουμε ως κατεστραμμένα ώστε να αποφύγει το λειτουργικό σύστημα να τα χρησιμοποιεί.

Οι μαγνητικοί δίσκοι κατασκευάζονται με εγγύηση για συγκεκριμένο αριθμό ωρών εργασίας. Δηλαδή ώρες που είναι στο ρεύμα, γιατί γράφει/διαβάζει ή όχι δεν μετράει για τον ηλεκτροκινητήρα που λειτουργεί συνέχεια. Επειδή λοιπόν έχουν μηχανικά μέρη, φθείρονται, και όταν αρχίσουν να παρουσιάζουν προβλήματα, ειδικά ο κινητήρας, οδεύουν προς σίγουρη κατάρρευση.

Άλλοι λόγοι καταστροφής ενός μαγνητικού δίσκου είναι ισχυρά μαγνητικά πεδία (π.χ. ένας ηλεκτροκινητήρας ψυγείου), και χτυπήματα που μπορεί να προκαλέσουν την σύγκρουση των κεφαλών με τον δίσκο.

Η άποψή μου είναι πως αν ένας μαγνητικός δίσκος εμφανίσει bad sectors, είναι πολύ πιθανόν σύντομα θα προκληθούν κι άλλα. Ο δίσκος είναι πολύ σημαντικός για να ρισκάρουμε. Η συμβουλή μου είναι πάρτε άλλον και αντιγράψτε τον πριν καταρρεύσει τελείως. Αν είναι αρκετά μεγάλος, μπορεί να τον χρησιμοποιήσετε αργότερα σαν δευτερεύον δίσκο για πράγματα που δεν σας ενδιαφέρουν, όπως ταινίες, μουσική και παιχνίδια.

Πρώτα ξεκινάμε το σύστημα από το live disk που έχουμε φτιάξει ώστε να μην χρειαστεί να κάνουμε προσάρτηση τον δίσκο που θα ελέγξουμε. Κατόπιν τρέχουμε το πρόγραμμα ελέγχου του συστήματος των αρχείων αλλά με ενεργοποιημένο τον έλεγχο για bad sectors.

# fsck -vcck /dev/sdxx

Αν δεν έχετε ext2+ σύστημα αρχείων θα πρέπει να χρησιμοποιήσετε το badblocks, αλλά δεν είναι καλή ιδέα να μην ενημερώσετε το σύστημα αρχείων.

# badblocks -nsv /dev/sdxx

Αν δεν σας ενδιαφέρουν τα περιεχόμενα του δίσκου, προτιμήστε με -wsv παραμέτρους, θα διαγράψει τον δίσκο μεν, θα κάνει πιο γρήγορα δε.

Σημείωση
Η τεχνολογία SMART (Self-Monitoring, Analysis, and Reporting Technology) που υπάρχει εδώ και χρόνια, θα πρέπει ήδη να αναφέρει sectors που έχουν ήδη αναγνωριστεί ως προβληματικοί. Επίσης από το SMART θα μπορούμε να δούμε και ένα ενδεικτικό αριθμό για τις ώρες λειτουργίας του.

Για να χρησιμοποιήσετε το SMART στο Linux, εφόσον δεν είναι υποστηρίζεται ήδη από την διανομή σας, εγκαταστήστε τα πακέτα smartmontools και gsmartcontrol.

Διόρθωση δικτύου

Μερικές διανομές, όπως αυτές που βασίζονται στο Ubuntu, χρησιμοποιούν πια το ip για τις ρυθμίσεις του δικτύου χωρίς να έχουν προεγκατεστημένες τις βασικές εντολές του Unix, όπως την ifconfig και την route.

# apt install net-tools

Στο Linux μπορούμε να έχουμε δίκτυο από απλό καλώδιο σειριακής (slip, cslip) ή παράλληλης πόρτας (plip) μέχρι ethernet και wireless και γενικά οτιδήποτε σχεδόν μπορεί να συνδέσει 2 υπολογιστές. Αυτό είναι το πρώτο επίπεδο (link layer) πάνω στο οποίο θα δρομολογηθούν τα πακέτα IP που μας ενδιαφέρουν.

Απαραίτητη Ορολογία Δικτύου

Ethernet
Το ethernet (έθερνετ) είναι η συνήθης τεχνολογία ενσύρματων δικτύων. Το 1983 απέκτησε πρότυπο (standard) γνωστό ως IEEE 802.3. Έχει χαρακτηριστικό βύσμα, παρόμοιο με της τηλεφωνικής γραμμής αλλά πιο μεγάλο.
ISP (Internet Service Provider)
Η εταιρεία ή ο οργανισμός που μας παρέχει την σύνδεση στο internet.
IP (Internet Protocol)
Το IP (άι-πι) είναι το χαμηλότερο σύστημα μετάδοσης δεδομένων του internet, το οποίο αναλαμβάνει την δρομολόγηση διάφορων άλλων ειδών πακέτων (datagrams). Χαρακτηρίζεται από τον μοναδικό αριθμό που δίνει σε κάθε μηχάνημα (IP address) και γι' αυτό συνηθίζεται συχνά όταν λέμε IP να εννοούμε αυτό τον αριθμό.
IP Address Ranges Reserved for Private Use (LAN)
Διευθύνσεις που μπορούν να χρησιμοποιηθούν για προσωπική χρήση (δηλαδή για τοπικά δίκτυα)
ClassΑπόΈως
A10.0.0.010.255.255.255
B172.16.0.0172.31.255.255
C192.168.0.0192.168.255.255
Gateway
Gateway ονομάζεται το υπολογιστικό σύστημα που είναι συνδεδεμένο με δύο ή περισσότερα φυσικά δίκτυα συγχρόνως και είναι ρυθμισμένο να μεταφέρει πακέτα από το ένα στο άλλο και αντίστροφα. Είναι η βασική εργασία ενός modem/router σαν αυτά που δίνουν οι ISP γιατί συνδέει το τοπικό δίκτυο, έστω και αν αποτελείται μόνο από τον router και ένα PC, με το εξωτερικό δίκτυο, το internet.
DNS (Domain Name System)
DNS σημαίνει Σύστημα Ονοματολογίας Τομέων. Το internet καταλαβαίνει μόνο αριθμούς, τις διευθύνσεις IP. Τα ονόματα είναι ένας πίνακας αντιστοίχησης, ονόματος και αριθμού. Όταν ζητάμε μια διεύθυνση (π.χ. www.gnu.org), το PC μας κάνει μια κλήση στα DNS servers που είναι καθορισμένα αυτόματα, είτε από εμάς, παίρνει την απαιτούμενη IP address που αντιστοιχεί στο όνομα που ζητήσαμε και με αυτή τελικά επικοινωνεί με τα άλλα μηχανήματα.

Παράδειγμα:

FIREFOX -> DNS SERVER: Ποιά είναι η διεύθυνση του www.gnu.org
DNS SERVER -> FIREFOX: 208.118.235.148
FIREFOX -> 208.118.235.148: Φέρε μου την κεντρική σελίδα
DHCP (Dynamic Host Configuration Protocol)
Το DHCP είναι ένα πρωτόκολλο/υπηρεσία που (και πρέπει να) προσφέρουν οι διακομιστές (servers) και οι δρομολογητές (routers) το οποίο επιστρέφει στο συνδεόμενο μηχάνημα τις απαραίτητες πληροφορίες για να συνδεθεί σωστά, όπως μια σωστή IP address που δεν χρησιμοποιείται από άλλο μηχάνημα και την διεύθυνση ενός έστω DNS server.

Παράδειγμα:

PC (0.0.0.0) -> DHCP SERVER: Δώσε μου τα στοιχεία για σύνδεση
DHCP SERVER -> PC: Θα είσαι ο 192.168.1.55
                   για DNS αιτήσεις θα πας 192.168.1.1
PC (192.168.1.55) -> DHCP SERVER: OK

Απλή σύνδεση (link layer)

Το πρώτο που κάνουμε είναι να δούμε τι δικτυακές συσκευές βλέπει το σύστημά μας:

# ifconfig -a

eth0: flags=4098<BROADCAST,MULTICAST>  mtu 1500
	inet 10.42.1.1  netmask 255.255.255.0  broadcast 10.42.1.255
	ether 00:1e:8c:74:53:40  txqueuelen 1000  (Ethernet)
...

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
	inet 127.0.0.1  netmask 255.0.0.0
	inet6 ::1  prefixlen 128  scopeid 0x10<host>
	loop  txqueuelen 1  (Local Loopback)
...

Εδώ μας λέει ότι έχουμε μια ethernet συσκευή με όνομα eth0 και το loopback interface (lo) που δεν μας αφορά. Ενεργοποιούμε την eth0 με ifconfig eth0 up, και καλούμε το dhclient eth0 για να πάρει IP address μέσω DHCP. Αν όλα πάνε καλά το ifconfig θα μας επιστρέψει κάτι τέτοιο:

# ifconfig eth0 up
# dhclient eth0
# ifconfig eth0

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
	inet 192.168.1.75  netmask 255.255.255.0  broadcast 192.168.1.255
	inet6 fe80::21e:8cff:fe74:5340  prefixlen 64  scopeid 0x20<link>
	ether 00:1e:8c:74:53:40  txqueuelen 1000  (Ethernet)
...

Αν όχι τότε έχουμε πρόβλημα στο πρώτο επίπεδο (link layer), καλωδίωση και ethernet protocol. Βγάζουμε το καλώδιο και το ξαναβάζουμε, το dmesg θα πρέπει να μας δείξει link is up, αλλιώς είναι πρόβλημα στην καλωδίωση.

Τις συνδέσεις και τις συσκευές ethernet μπορούμε να τις ελέγξουμε με τα προγράμματα arp και ethtool.

Routing table

Το routing table (πίνακας δρομολόγησης) είναι ο πίνακας που καθορίζει ποιό πακέτο θα αποσταλεί από ποιά συσκευή δικτύου.

Για να είμαστε εδώ, έχουμε βεβαιωθεί ότι η ethernet είναι συνδεδεμένη, αλλά το σύστημα δεν επικοινωνεί με το internet.

Κοιτάμε με το ifconfig να δούμε αν έχει πάρει σωστά IP.

# ifconfig eth0

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
	inet 10.54.2.3  netmask 255.255.255.0  broadcast 10.54.2.3

Για να βρούμε τις άλλες συσκευές που συνδέονται στο LAN (Local Area Network, Τοπικό Δίκτυο) μέσω από ethernet τρέχουμε το arp.

# arp -a

base-ext (192.168.1.2) at 56:b8:0a:7c:a8:b1 [ether] on eth0
base (192.168.1.1) at 00:1d:1c:03:76:72 [ether] on eth0

Από το παραπάνω βλέπουμε ότι το router (δρομολογητής) μας έχει διεύθυνση 192.168.1.1, που συνηθίζεται άλλωστε, και παρατηρούμε η κάρτα μας δεν έχει πάρει την αναμενόμενη διεύθυνση. Θα έπρεπε να είχε μια της μορφής 192.168.1.x (Class C intranet) ώστε να είναι στο ίδιο subnet με τον router.

Δίνουμε εμείς μια IP αποδεκτή για τον δρομολογητή μας, π.χ. 192.168.1.99 και προσθέτουμε μια εγγραφή στο routing table να στέλνει όλα τα πακέτα που δεν ξέρει ήδη τον παραλήπτη, δηλαδή δεν είναι στο τοπικό δίκτυο, μέσω του router (gateway). Αποδεκτή IP σε ένα class C δίκτυο όπως οι διευθύνσεις 192.168.x.x είναι όταν οι τρεις πρώτοι αριθμοί είναι ίδιοι με του router, και ο τελευταίος που παίρνει τιμές από 1 έως και 254 δεν ανήκει σε άλλη συσκευή.

# ifconfig eth0 192.168.1.99
# route add -net 0.0.0.0 gw 192.168.1.1
# route -n

Kernel IP routing table
Destination   Gateway       Genmask         Flags Metric Ref  Use Iface
0.0.0.0       192.168.1.1   0.0.0.0         UG    0      0      0 eth0
127.0.0.0     0.0.0.0       255.0.0.0       U     0      0      0 lo
192.168.1.0   0.0.0.0       255.255.255.0   U     0      0      0 eth0

Τα ping με IPs θα πρέπει να λειτουργούν τώρα. Δοκιμάστε να κάνετε ping 208.118.235.148 που είναι το IP address του gnu.org ή στο 62.1.46.47 που είναι το IP της forthnet.gr.

Αν κάτι δεν πάει καλά δοκιμάζουμε την σύνδεσή μας με το router μέσω HTTP και αυτό γιατί μερικές φορές βλέπουμε το ICMP (ping) να είναι κλειδωμένο.

# curl 192.168.1.1

<html>
<head>
	<title>ZX48 Router Configuration</title>
...

Αν μας επιτρέψει κάτι, ακόμα και HTTP μήνυμα σφάλματος, η σύνδεση μας με τον δρομολογητή λειτουργεί άψογα· το πιθανότερο είναι πια το πρόβλημα να βρίσκεται στις παραμέτρους (π.χ. firewall) ή στην σύνδεση του router με το internet.

Αν όχι τότε το πρόβλημα είναι είτε στην καλωδίωση του συστήματός μας με το router είτε στο routing table. Είναι πολύ πιθανό να έχουμε λάθος διεύθυνση δρομολογητή.

Πλήρης επεξήγηση του routing table του παραδείγματος

1: Destination   Gateway       Genmask         Iface
2: 0.0.0.0       192.168.1.1   0.0.0.0         eth0
3: 127.0.0.0     0.0.0.0       255.0.0.0       lo
4: 192.168.1.0   0.0.0.0       255.255.255.0   eth0

Το genmask που πιο σωστά λέγετε netmask, κάνει μια πράξη AND μεταξύ του destination και του netmask και αποφασίζει αν το πακέτο ανήκει σ' αυτόν τον κανόνα. Κατά κανόνα το μόνο που χρειάζεται να θυμάστε είναι ότι αν έχει αριθμό 255 πρέπει να είναι όμοιος ο αριθμός, αν έχει 0 μπορεί να είναι οποιοδήποτε αριθμός.

Έτσι, στην γραμμή 4 αναφέρει, όλα τα πακέτα που έχουν παραλήπτη 192.168.1.* αποστέλνονται στην κάρτα eth0.

Έτσι, στην γραμμή 3 αναφέρει, όλα τα πακέτα που έχουν παραλήπτη 127.*.*.* αποστέλνονται στην κάρτα lo.

Και στην γραμμή 2 αναφέρει, ότι οποιοδήποτε άλλο πακέτο (αυτό σημαίνει το 0.0.0.0), στέλνετε στο 192.168.1.1 για δρομολόγηση σε άλλο δίκτυο, στην περίπτωσή μας, το internet.

Domain Name System

Εφόσον όλα τα άλλα λειτουργούν αυτό που μας απομένει είναι να διορθώσουμε το DNS (Domain Name System). Οι διευθύνσεις των DNS servers υπάρχουν ή πρέπει να υπάρχουν στο αρχείο /etc/resolv.conf. Από την ώρα που συμπληρώσετε αυτό το αρχείο θα λειτουργεί και το DNS.

# echo 'nameserver 8.8.8.8' > /etc/resolv.conf

Κατά κανόνα το default DNS server είναι το IP του ίδιου του router που κάνει αναδρομολόγηση των αιτήσεών μας στο σύστημα του ISP. Εναλλακτικά όμως μπορούμε να χρησιμοποιήσουμε άλλους servers, όπως της Google (8.8.8.8) και του Yandex (77.88.8.8).

Πολλές διανομές φτιάχνουν το resolv.conf κατά την σύνδεση αυτόματα. Σε αυτή την περίπτωση διορθώστε τα αρχεία στο /etc/resolvconf/. Αν έχει εκεί ένα αρχείο head ή resolv.head ή κάτι παραπλήσιο απλά προσθέστε ένα nameserver που να λειτουργεί, όπως έκανα παραπάνω με της Google.

# echo 'nameserver 8.8.8.8' >> /etc/resolvconf/head

Την επόμενη φορά θα το έχει σαν πρώτη επιλογή.

Σημείωση
Οι διευθύνσεις των τοπικών μηχανημάτων ορίζονται στο /etc/hosts και έχουν προτεραιότητα έναντι των απαντήσεων των DNS servers.

DNS servers που προτείνω:

# fastest 
nameserver 1.1.1.1
# OpenNIC
nameserver 208.67.222.222
nameserver 208.67.220.220
# Yandex
nameserver 77.88.8.8
nameserver 77.88.8.1

Περισσότερα για δίκτυα

Οι οδηγίες σ' αυτό το κεφάλαιο είναι για ubuntu based διανομές καθώς είναι το συνηθέστερο για τερματικά και γιατί οι χρήστες των άλλων διανομών κατά κανόνα ξέρουν περισσότερα.

Εγκαταστήστε ssh και sshfs για απομακρυσμένη διαχείριση και μεταφορές αρχείων

# apt install ssh sshfs lrzsz zssh filezilla
# systemctl enable ssh
# systemctl start ssh

Τώρα έχετε ssh για να συνδέεστε από console σαν telnet, scp για copy αρχείων όπως στο τερματικό, sftp για σύνδεση σαν FTP, και τέλος sshfs για προσάρτηση ολόκληρο το σύστημα στο τοπικό σας σύστημα και όλα αυτά με κρυπτογράφιση.

Το zssh είναι έκδοση του ssh με zmodem, μπορεί να στέλνει και να λαμβάνει αρχεία μέσα από το ssh client την ώρα που είναι συνδεμένο.

Το filezilla είναι GUI SFTP client.

Εγκαταστήστε avahi για να βλέπονται όλα μεταξύ τους

# apt install avahi-daemon avahi-dnsconfd avahi-discover
# systemctl enable avahi-daemon avahi-dnsconfd

Ενεργοποιήστε στο αρχείο ορισμών του avahi

# vi /etc/avahi/avahi-daemon.conf

τις παραμέτρους για δημοσίευση:

[server]
enable-dbus=yes
...
[publish]
publish-addresses=yes
publish-hinfo=yes
publish-workstation=yes

Εκκίνηση των υπηρεσιών

# systemctl start avahi-daemon avahi-dnsconfd

Παρακολουθήστε τι υπάρχει στο τοπικό δίκτυο

$ avahi-discover &

Διάφορα κολπάκια και εύκολες διορθώσεις

Επιδιορθώνοντας το /dev

Όταν το kernel ξεκινά πρέπει να υπάρχουν ήδη μερικές προαπαιτούμενες συσκευές στο /dev, όπως τα console και null[LFS]. Οι υπόλοιπες συσκευές φτιάχνονται από το udev κατά την εκκίνηση.

# mknod -m 600 /dev/console c 5 1
# mknod -m 666 /dev/null c 1 3

Σε παλιότερες Linux διανομές και στα παραδοσιακά Unices πρέπει να υπάρχει στο /dev ή στο /sbin το MAKEDEV script.

# cd /dev
# ./MAKEDEV -v null
# ./MAKEDEV -v fd0

Σε linux με πυρήνα >= 2.6, χρησιμοποιούμε το udev, στο οποίο μπορείτε να δώσετε παράμετρο να ξαναδημιουργήσει όλες ή μεμονωμένες συσκευές.

# udevadm trigger --sysname-match=null

Σε περίπτωση που δεν έχετε τα προηγούμενα μπορείτε κάλλιστα να δημιουργήσετε τις συσκευές που λείπουν με το mknod. Τα ονόματα αυτά θα λειτουργήσουν και σε νεότερα kernels βασισμένα στο udev.

Πίνακας κυριότερων συσκευών με τα χαρακτηριστικά τους
ΌνομαΤύποςMajorMinorΌνομαΤύποςMajorMinor
nullc13 zeroc15
consolec51 sdab80
sda1-15b81-15 sdbb816
sdcb832 hdab3 (1st IDE)0
hdbb3 (1st, slave)64 hdcb22 (2nd IDE)0
sr0b110 loop0..b70..

Τα ονόματα με τα χαρακτηριστικά τους πρέπει να βρίσκονται στο /usr/src/linux/Documentation/devices.txt. Ένας εναλλακτικός τρόπος να τα βρείτε είναι από ένα live σύστημα να δώσετε ls /dev/ -la | less.

Παραρτήματα

GPT (GUID Partition Table)

Το GPT είναι ένα νεότερο πρότυπο της δομής του πίνακα διαμερισμάτων των δίσκων. Το παλιό γνωστό μας MBR που μας συνοδεύει από το 1983 (PC-DOS v2.0), είναι περιορισμένο στα 2TB μέγεθος γιατί φυλάσσει τα μεγέθη σε 32bits ακεραίους· επίσης έχει περιορισμό και σε 4 (πρωτεύοντα) διαμερίσματα.

Το νέο πρότυπο παρότι σχεδιάστηκε σαν μέρος του [U]EFI, όταν χρησιμοποιείται από το Linux ή το BSD δεν το χρειάζεται. Λειτουργεί άψογα σε μηχανήματα με το παλιό κλασσικό BIOS.

Τα χαρακτηριστικά του είναι:

  1. Η συμβατότητα με το MBR (Hybrid/Protective MBR)
  2. Η επέκταση του ορίου των δίσκων στα 9.4 ZB (Zeta Bytes) (9.4 δις TB)
  3. Η επέκταση του αριθμού των διαμερισμάτων στα 128.
  4. Χρήση GUID (Globally Unique Identifier), δηλαδή ενός μοναδικού ID του διαμερίσματος.
  5. Προσθήκη CRC (Cyclic Redundancy Check) αριθμού της εγγραφής του διαμερίσματος.

Συμβατότητα:

Protective MBR
Αυτή είναι η standard μέθοδος· δηλώνει στο παλιό partition table, ένα partition που περιλαμβάνει όλο τον δίσκο (κωδικός 0xEE).
Hybrid MBR
Το υβριδικό MBR είναι μια τροποποίηση του protective MBR έτσι ώστε να υποστηρίζονται και οι δύο περιπτώσεις τουλάχιστον για 1 boot partition ακόμα. Το πρώτο partition του παλιού MBR παραμένει να βλέπει όλο το δίσκο, αλλά τα υπόλοιπα 3 μπορούν να δείχνουν σε θέσεις ίδιες με partitions του GPT.

Μετατροπή MBR σε GPT

Το gdisk το κάνει αυτόματα. Όταν το τρέχουμε και εάν ο δίσκος έχει MBR, τότε δημιουργεί ένα GPT στη μνήμη με τα ίδια στοιχεία... απλά χρειάζεται να το γράψουμε, και να ενημερώσουμε το boot manager.

Σημείωση
  1. Αν δεν έχετε δίσκο με χωρητικότητα μεγαλύτερη των 2TB δεν υπάρχει κανένας λόγος να το χρησιμοποιήσετε.
  2. Το μέγεθος του νέου MBR+GPT είναι 33280 bytes ή αλλιώς 65 sectors των 512 bytes.
  3. Το MacOS X και τα Microsoft Windows (7+), τουλάχιστον μέχρι τώρα, καλοκαίρι 2017, δεν υποστηρίζουν εκκίνηση από το GPT παρά μόνο αν υπάρχει [U]EFI firmware!
  4. Το grub2 λειτουργεί ήδη με κλασσικό BIOS+GPT. Καλό είναι όμως να φτιάξετε στην αρχή ένα BIOS Boot Partition.
  5. Και το lilo θα λειτουργήσει αλλά υπό περιπτώσεις.

Πολλαπλές Διανομές

Μια έξυπνη λύση είναι να έχουμε πολλαπλά διαμερίσματα δίσκων. Με δύο διαμερίσματα για σύστημα αρχείων, ένα σταθερό και ένα για δοκιμές, ένα τρίτο διαμέρισμα για τα δεδομένα όπως το home directory μας και το srv (κατάλογος για στοιχεία διακομιστή), και ένα για εικονική μνήμη.

NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0  1024G  0 disk
├─sda1   8:1    0    64G  0 part / (1ο σύστημα)
├─sda2   8:2    0    64G  0 part / (2ο σύστημα)
├─sda3   8:3    0   888G  0 part /data
└─sda4   8:4    0     8G  0 part [SWAP]

Τα αρχεία κρατάνε το UID, δηλαδή έναν μοναδικό αριθμό που αντιστοιχεί σε ένα χρήστη, και όχι το όνομα του χρήστη· το σύστημα αντιστοιχεί το UID με το username σύμφωνα με τα στοιχεία που υπάρχουν στο αρχείο /etc/passwd. Αντίστοιχα συμβαίνει και με το GID και την αντιστοίχηση που περιγράφεται στο /etc/group.

Για να αποφύγουμε τα προβλήματα με τα IDs δημιουργούμε ένα username με κάποιο μεγάλο UID, π.χ. το 6000, 11000 κ.λπ. και ένα αντίστοιχο group. Αυτό χρειάζεται γιατί τα πρώτα IDs τα χρησιμοποιούν οι διανομές για εργασίες του συστήματος. Κάθε φορά που βάζουμε νέο σύστημα, ενημερώνουμε τα δύο αυτά αρχεία προσθέτοντας στο τέλος την εγγραφή για τα δικά μας IDs και λειτουργούν όλα κανονικά.

Μετά την εγκατάσταση προσαρτούμε τα /home και /srv είτε με εντολές στο /etc/rc.d/rc.local (ubuntu: /etc/rc.local).

# mount --bind /home /data/home
# mount --bind /srv  /data/srv

είτε μόνιμα στο /etc/fstab.

/dev/sda1  /     ext4 defaults,lazytime,data=writeback 1 1
#/dev/sda2 /     ext4 defaults,lazytime,data=writeback 1 1
/dev/sda3  /data ext4 defaults,lazytime,data=writeback 0 2
/dev/sda4  none  swap auto,sw                          0 0
/data/home /home none auto,bind                        0 0
/data/srv  /srv  none auto,bind                        0 0

Κάθε φορά που θα θέλουμε να αλλάξουμε διανομή θα πρέπει να σημειώνουμε το σωστό διαμέρισμα στο fstab να τρέχουμε το lilogrub) και τέλος να κάνουμε επανεκκίνηση.

Περισσότερα για μαγνητικούς δίσκους

Περισσότερα για ext4

RAM Drives

RAM drive λέγετε ένας εικονικός δίσκος που φυλάσσετε στην RAM (Random Access Memory). Επειδή ακριβώς βρίσκετε στην μνήμη, είναι ταχύτατος αλλά τα στοιχεία του χάνονται κατά το κλείσιμο του υπολογιστή.

Παλαιότερα για ένα απλό RAM drive χρησιμοποιούσαμε το εικονικό σύστημα αρχείων ramfs, το οποίο ήταν περιορισμένο από την ελεύθερη φυσική μνήμη, ενώ το μέγιστο μέγεθός του έπρεπε να οριστεί κατά την εκκίνηση του kernel.

# mount -t ramfs none /mnt/mountpoint -o size=2G

Το tmpfs είναι ένα εικονικό σύστημα αρχείων το οποίο φυλάσσεται στην εικονική μνήμη, δηλαδή όσο από αυτό δεν κρατείτε από το kernel στην RAM. Είναι το πλέον ιδανικό για RAM drive.

# mount -t tmpfs none /mnt/mountpoint -o size=4G
# df -h

Filesystem      Size  Used Avail Use% Mounted on
...
none            4,0G     0  4,0G   0% /mnt/mountpoint

Εικονικοί Δίσκοι

Στο linux είναι πολύ εύκολο να φτιάξουμε και να διαχειριστούμε εικονικούς δίσκους, δίσκοι δηλαδή που στην πραγματικότητα είναι αρχεία, λειτουργούν όμως ακριβώς με τον ίδιο τρόπο όπως μια πραγματική συσκευή.

Παρακάτω δημιουργούμε ένα αρχείο (disk.img) αντιγράφοντας μηδενικά (/dev/zero) μεγέθους 4GB.

# dd if=/dev/zero of=disk.img bs=4M count=1024

Όπως όλοι οι δίσκοι πρέπει να αποκτήσει σύστημα αρχείων για να χρησιμοποιηθεί, το μορφοποιούμε (format) λοιπόν

# mkfs -t ext4 disk.img

Έτοιμο για προσάρτηση και χρήση

# mount disk.img /mnt/mountpoint -o loop
# df -h

Filesystem      Size  Used Avail Use% Mounted on
...
/dev/loop0      3,9G  8,0M  3,7G   1% /mnt/mountpoint

Και φυσικά σαν αρχείο που είναι μπορούμε να το εξαφανίσουμε στην στιγμή

# umount /mnt/mountpoint
# rm disk.img

Ένας εικονικός δίσκος μπορεί να χρησιμοποιηθεί με διάφορους εξομοιωτές PC ή άλλου υπολογιστικού συστήματος, να γίνει σ' αυτόν εγκατάσταση Λ.Σ. και να κάνουμε εκκίνηση απ' αυτόν.

Παρακάτω δημιουργώ ένα δίσκο 32GB, και κάνω boot από το dvd-image της εγκατάστασης του slackware σε ένα εικονικό 64 bit x86 Intel PC με κύριο δίσκο, τον δίσκο που θα γίνει εγκατάσταση το slackware, τον δίσκο που προηγουμένως έφτιαξα.

# dd if=/dev/zero of=disk.img bs=4M count=8192
# qemu-system-x86_64 -enable-kvm \
	-m 2048 -smp 4 \
	-drive file=disk.img,format=raw \
	-boot d -cdrom slackware64-install.iso

Περί μοναδικότητας του MAC Address κ.α.

Οπουδήποτε μεσολαβεί λογισμικό τα IDs μπορούν να παραβιαστούν

Ισχύει και για τα τηλέφωνα και για οτιδήποτε. Οπουδήποτε μεσολαβεί λογισμικό τα IDs παραβιάζονται. Όσο εύκολα μπορείς να αλλάξεις ID κατά την εκκίνηση, άλλο τόσο πιο εύκολα μπορείς να το παραβιάσεις κατά την ανάγνωση, παραμονή του στην μνήμη, την αποστολή, την λήψη αίτησης για αποστολή ή την εμφάνιση.

# ifconfig eth0

eth0: flags=4163  mtu 1500
	inet 192.168.1.100  netmask 255.255.255.0  broadcast 192.168.1.255
	inet6 fe80::21e:8cff:fe74:5340  prefixlen 64  scopeid 0x20
	ether 00:1e:8c:74:53:40  txqueuelen 1000  (Ethernet)
...

# macchanger -a eth0

Current MAC:   00:1e:8c:74:53:40 (ASUSTek COMPUTER INC.)
Permanent MAC: 00:1e:8c:74:53:40 (ASUSTek COMPUTER INC.)
New MAC:       b8:7a:c9:fd:91:3e (Siemens Ltd.)

# ifconfig eth0

eth0: flags=4163  mtu 1500
	inet 192.168.1.100  netmask 255.255.255.0  broadcast 192.168.1.255
	inet6 fe80::21e:8cff:fe74:5340  prefixlen 64  scopeid 0x20
	ether b8:7a:c9:fd:91:3e  txqueuelen 1000  (Ethernet)
...

Και στον router...

BTW, και οι routers, linux τρέχουν, και η ROM τους, ένας εικονικός δίσκος είναι για το linux.

Προσθήκες

Αλλαγή ονόματος συσκευής ethernet (Σεπ 2017)
man 5 iftab, man ifrename
Αλλαγή ονόματος συσκευής ethernet με το ip (Απρ 2019)
# ethname=enp3s0
# newname=eth0
# ip link set $ethname down
# ip link set dev $ethname name $newname
# ip link set $newname up
Εντολές αλλαγής ή ορισμού label σε filesystem (Οκτ 2017)
ext2-4: e2label, swap: swaplabel, ntfs: ntfslabel, fat: fatlabel
BOOT με UEFI
Σε δίσκο με GPT, φτιάχουμε ένα partition fat32 των ~500MB, με flags boot, esp και το προσαρτίζουμε στο /boot/efi. Το grub θα βάλει τα απαραίτητα αρχεία.

# grub-install --target x86_64-efi
Δίσκος με BOOT για UEFI (GPT) και BIOS (MBR) (Ιουν 2019)
Αυτά τα δύο μπορούν να συνυπάρχουν αρκεί να έχουμε ένα μικρό διαμέρισμα ~1 MB με τύπο bios-boot και φυσικά ένα διαμέρισμα για το UEFI με flags boot, esp.

# grub-install --target=i386-pc /dev/sdX
# grub-install --target x86_64-efi
BOOT disk image με το GRUB (Ιουν 2019)
Αντιγράφουμε το disk-image σε ένα κατάλογο του συστήματος από όπου θα εγκαταστήσουμε το grub (εκεί που υπάρχει το /boot/grub), π.χ. /boot/disk.img. Κάνουμε επανεκκίνηση και στο grub και πατάμε c να μπούμε στο command-line mode του. Κατόπιν του δίνουμε εντολές να κάνει εκκίνηση από το disk image μας. Με αυτό τον τρόπο μπορείτε να κάνετε upgrade (flash) και το BIOS. Αν δεν λειτουργήσει με CD/DVD boot image δοκιμάστε να την μετατρέψετε σε hard-disk boot image.

# chainloader /boot/disk.img
# exit

Συνδέσεις

Περαιτέρω ανάγνωση

Βιβλιογραφία

TIP TCP/IP Illustrated, Vol. I: The Protocols
W. Richard Stevens Addison-Wesley 1993
UPE The UNIX Programming Environment
Brian W. Kernighan, Rob Pike AT&T Bell Labs, Prentice Hall 1984
DBGB DEC The Big Gray Book
Digital Equipment Corporation 1990
DUNG DEC Ultrix-32 Guide to Networking
Digital Equipment Corporation 1988
DOSE The MS-DOS encyclopedia
Ray Duncan Microsoft Press 1989
PCIN PC Intern: System Programming
Michael Tischer Abacus 1992
ADOS Advanced MS-DOS Programming
Ray Duncan Microsoft Press 1988
IBMX IBM Personal Computer Hardware Reference Library
IBM 1984 (PC/XT)
LSA Linux System Administrator's Survival Guide
Tim Parker SAMS 1996
SAG The Linux System Administrator's Guide
Lars Wirzenius GNU 1998
http://www.tldp.org/LDP/sag/sag.pdf
NAG The Linux Network Administrators Guide
Many GNU 1996
http://www.tldp.org/LDP/nag2/nag2.pdf
LFS Linux From Scratch
Gerard Beekmans 2016
http://www.linuxfromscratch.org/lfs/