Skip to main content

Χρήση συστήματος αρχείων NTFS στο FreeBSD

Βασικά την ιστορία μου σχετικά με την πρώτη επαφή μου με το FreeBSD την γνωρίζετε. Αν όχι μπορείτε να ανατρέξετε στο blog μου. Μέσα από αυτή την ιστορία βγαίνει και το ακόλουθο How-To που περιγράφει τον τρόπο με τον οποίο ένα partition NTFS γίνεται προσβάσιμο από το FreeBSD.

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

Η περίπτωση που εξετάζεται σε αυτό το How-To είναι, φυσικά, η ύπαρξη του FreeBSD με κάποιο άλλο λειτουργικό σύστημα, είτε αυτό είναι Linux, όπως στην περίπτωση του γράφοντα, είτε Windows.

Γιατί NTFS και όχι κάποιο άλλο;

Το Linux χρησιμοποιεί σαν βασικό σύστημα αρχείων το ext3. Πιο καινούργιες διανομές προσπαθούν να χρησιμοποιήσουν το ext4, το οποίο όμως έχει αρκετά προβλήματα σταθερότητας των δεδομένων και θα έπρεπε να αποφευχθεί η χρήση του (αυτό συμβαίνει τη στιγμή που γράφεται αυτό το άρθρο. Στο μέλλον όλα αυτά τα προβλήματα που έχει το ext4 μπορεί να σταματήσουν να υπάρχουν). Παρότι Unix clone δεν έχει τη δυνατότητα να εγγράφει δεδομένα στο κλασικό σύστημα αρχείων UFS που χρησιμοποιεί το FreeBSD.

Η αρχιτεκτονική του ext3 είναι ίδια με αυτή του ext2 μόνο που περιέχει και ένα κομμάτι journaling. Το κομμάτι αυτό βοηθάει στην ασφαλή εγγραφή των δεδομένων και την εύκολη ανάκτησή τους σε περίπτωση αστοχίας του υπολογιστή κατά την εγγραφή.

Το FreeBSD μπορεί να γράψει μέσα σε σύστημα αρχείων ext2, αλλά δεν μπορεί να χρησιμοποιήσει το journaling κομμάτι του ext3. Έτσι, λόγω της ομοιότητας των δύο αυτών συστημάτων θα μπορούσε κάποιος να προσαρτήσει ένα σύστημα αρχείων του τελευταίου τύπου σαν ext2 και να το χρησιμοποιήσει μέσα από το FreeBSD, αλλά σε αυτή την περίπτωση θα έπρεπε κάθε φορά να κάνει ένα καλό filesystem check κατά την εκκίνηση του Linux για να συγχρονίζεται το journaling με την κατάσταση των δεδομένων μέσα στον σκληρό δίσκο (βασικά είναι μια πολύ απλοποιημένη εξήγηση, αλλά δεν θα γίνει πιο λεπτομερής γιατί δεν είναι μέσα στον σκοπό αυτού του άρθρου...). Αυτό το καθιστά ακατάλληλο για σύστημα αρχείων σε κοινό χώρο μεταξύ Linux και FreeBSD.

Όσο για την περίπτωση των Windows τα μόνα διαθέσιμα συστήματα αρχείων είναι τα FAT32 και NTFS. Και τα δύο μπορούν να χρησιμοποιηθούν από το FreeBSD αλλά και από το Linux εξίσου καλά. Η διαφορά τους είναι σε μια σημαντική λεπτομέρεια: Το FAT32 δε μπορεί να αποθηκεύσει αρχεία μεγέθους μεγαλύτερου των 4GBytes. Κατά συνέπεια, αν κάποιος θέλει να μπορεί να έχει καταχωρημένα κάποια DVD ISO Images δε θα μπορεί να το κάνει στο FAT32 γιατί αυτά φτάνουν εύκολα τα 4,7GBytes ή και περισσότερο (για Dual Layer DVDs).

Η παραπάνω συζήτηση καταλήγει στον σκοπό αυτού του How-To, που είναι να δείξει πώς μπορεί να χρησιμοποιηθεί το NTFS σαν κοινό σύστημα αρχείων μεταξύ του FreeBSD και ενός άλλου λειτουργικού συστήματος.

Δυνατότητα ανάγνωσης/εγγραφής σε σύστημα NTFS (module fuse)

Το module που χρειάζεται στο kernel του FreeBSD για τη χρήση του συστήματος αρχείων NTFS με δυνατότητα rw είναι το fusefs-ntfs. Βρίσκεται στα ports στον κατάλογο sysutils/fusefs-ntfs. Αυτό που έχει να κάνει κάποιος σε πρώτο βήμα είναι η εγκατάστασή του:

beastie@freebsd:~> cd /usr/ports/sysutils/fusefs-ntfs
beastie@freebsd:/usr/ports/sysutils/fusefs-ntfs> su
Password:
freebsd# make install clean
...
... Μηνύματα build ...
...
freebsd#

Προτείνεται να μείνουν οι ρυθμίσεις στις προεπιλεγμένες. Αφού ο υπολογιστής κάνει όλες τις απαραίτητες ενέργειες θα ξαναδείξει το prompt. Για να γίνει δυνατή η χρήση του module θα πρέπει να πούμε στο σύστημά μας να το φορτώνει κατά την εκκίνηση του λειτουργικού. Αρκεί η προσθήκη στο /etc/rc.conf της ακόλουθης γραμμής:

fusefs_enable="YES"

Η προσθήκη αυτής της γραμμής δεν υποχρεώνει το σύστημα να φορτώσει αυτή τη στιγμή το module αλλά μόνο στην εκκίνηση. Για να φορτωθεί το module χωρίς να χρειαστεί επανεκκίνηση αρκεί να δοθεί η εντολή:

freebsd# kldload fuse

σαν χρήστης root. Η πρόσβαση μιας κατάτμησης γίνεται διαμέσου ενός καταλόγου ο οποίος θα πρέπει να προϋπάρχει πριν γίνει η προσάρτησή της σε αυτόν. Αν το όνομα του καταλόγου είναι π.χ. /windows τότε θα πρέπει να εκτελεστεί (την πρώτη μόνο φορά) η ακόλουθη εντολή η οποία τον δημιουργεί:

freebsd# mkdir /windows

Τώρα που υπάρχει ο επιθυμητός κατάλογος αρκεί μόνο η εντολή προσάρτησης του συστήματος NTFS σε αυτόν:

freebsd# ntfs-3g /dev/ad0s1 /windows

Σε αυτή την εντολή είναι φανερό ότι η κατάτμηση που θα προσαρτηθεί είναι η πρώτη (s1) που υπάρχει στον πρώτο σκληρό δίσκο (ad0) του υπολογιστή. Φυσικά η ονομασία εξαρτάται από το υλικό του υπολογιστή και από τις κατατμήσεις του σκληρού δίσκου. Αυτό σημαίνει πως θα πρέπει να διαπιστωθεί το κατάλληλο όνομα του device/slice που θα χρησιμοποιηθεί.

Τώρα σαν απλός χρήστης θα πρέπει να υπάρχει η δυνατότητα πρόσβασης στα αρχεία του NTFS:

beastie@freebsd:~> cd /windows
beastie@freebsd:/windows > ls
...
... Λίστα αρχείων ...
...
beastie@freebsd:/windows >

Λίγα λόγια για το /etc/fstab

Το FreeBSD, όπως και το Linux μπορούν να κάνουν αυτόματα προσάρτηση σε κατατμήσεις κατά την εκκίνηση τους. Ποιες κατατμήσεις θα προσαρτηθούν και πού, δηλώνεται στο αρχείο /etc/fstab. Σε αυτό υπάρχει μια λίστα με κατατμήσεις και καταλόγους στους οποίους προσαρτώνται, καθώς και κάποιες παράμετροι που ρυθμίζουν τα δικαιώματα των χρηστών και άλλες λεπτομέρειες. Κάθε μια γραμμή δηλώνει για κάθε προσάρτηση όλες τις απαραίτητες πληροφορίες. Οι παράμετροι δίνονται στην εντολή mount η οποία είναι στην πραγματικότητα μια ενδιάμεση εντολή που καλεί μια άλλη, της μορφής mount_filesystem όπου filesystem είναι ο τύπος του συστήματος αρχείων που θα προσαρτηθεί. Αν, λοιπόν, στο /etc/fstab υπάρχει η γραμμή

/dev/acd0     /cdrom    cd9660    ro,noauto    0    0

τότε όταν θα χρειαστεί να προσαρτηθεί το device /dev/acd0 (CD Recorder), αυτό θα είναι προσβάσιμο διαμέσου του καταλόγου /cdrom, θα έχει σύστημα αρχείων CD9660 και θα είναι προσαρτημένο με διακαιώματα ανάγνωσης μόνο (rο). Δεν θα προσπαθήσει το σύστημα να το προσαρτήσει αυτόματα κατά την εκκίνηση του FreeBSD (noauto). Ο υπολογιστής, όταν το ζητήσει ο χρήστης, για να αποκτήσει πρόσβαση στη συσκευή και το σύστημα αρχείων της θα εκτελέσει, τελικά, την εντολή mount_cd9660 -o ro /dev/acd0 /cdrom.

Στην περίπτωση του NTFS, αν εκτελεστεί η εντολή mount_ntfs ... τότε δεν θα υπάρχει η δυνατότητα εγγραφής στο σύστημα αρχείων, διότι το ntfs module δεν την δίνει. Μια γραμμή της μορφής

/dev/ad0s1    /windows  ntfs    rw    0    0

δεν είναι αρκετή για το επιθυμητό αποτέλεσμα. Το rw θα αγνοηθεί και η δυνατότητα εγγραφής δεν θα υπάρχει.

Για να μπορέσει το σύστημα να έχει πρόσβαση και για εγγραφή, θα πρέπει να χρησιμοποιηθεί το module fuse για ntfs-3g. Επειδή η κατάλληλη εντολή για προσάρτηση του NTFS για εγγραφή δεν είναι η mount_ntfs-3g (για την ακρίβεια ούτε καν που υπάρχει αυτή η εντολή) αλλά η ntfs-3g όπως είδαμε και παραπάνω, θα πρέπει να πούμε στο υποσύστημα του /etc/fstab να μη χρησιμοποιήσει την εντολή mount_ntfs αλλά την επιθυμητή ntfs-3g. Για να γίνει αυτό αρκεί να προστεθεί η παράμετρος mountprog=/usr/local/bin/ntfs-3g. Με αυτό τον τρόπο παρακάμπτεται η κλασική χρήση της mount_ntfs και χρησιμοποιείται απ' ευθείας η ntfs-3g!

Άλλο ένα πρόβλημα που πρέπει να προσεχθεί είναι ότι η εντολή ntfs-3g δεν περιλαμβάνεται στο βασικό σύστημα, και δεν είναι διαθέσιμη πριν την προσάρτηση του /usr. Για να γίνει αυτό θα πρέπει να προστεθεί και η παράμετρος late, ώστε η προσάρτηση του NTFS να γίνει μετά την προσάρτηση των υπόλοιπων filesystems.

Τέλος αν το NTFS είναι γραμμένο με διαφορετική κωδικοποίηση γλώσσας απ' ότι χρησιμοποιεί το σύστημα του FreeBSD, θα πρέπει να δηλωθεί και η επιθυμητή κωδικοποίηση μέσα στις παραμέτρους. Κάτι σαν την παράμετρο locale=el_GR.UTF-8 είναι η λύση. Στο σύστημα του γράφοντος η τελευταία δεν χρειάζεται γιατί όλο το σύστημα λειτουργεί με UTF-8, κάτι που είναι κοινό στις περισσότερες περιπτώσεις.

Μετά από όλα αυτά η γραμμή που δηλώνεται μέσα στο /etc/fstab είναι η

/dev/ad0s1   /windows  ntfs  rw,late,mountprog=/usr/local/bin/ntfs-3g,locale=el_GR.UTF-8  0   0

Αν δεν είναι επιθυμητή η αυτόματη προσάρτηση της κατάτμησης NTFS κατά την εκκίνηση του λειτουργικού τότε αρκεί να προστεθεί η παράμετρος noauto. Σε αυτή την περίπτωση δεν είναι απαραίτητη η χρήση της παραμέτρου late, διότι όταν ο χρήστης θα είναι σε θέση να δώσει την εντολή mount είναι σίγουρο ότι τόσο το module όσο και η εντολή ntfs-3g θα είναι διαθέσιμα.

Αυτά για την χρήση του NTFS στο FreeBSD.

Χρυσοχέρης Ηλίας