blocks vs bytes
Vasilis Vasaitis
v.vasaitis at sms.ed.ac.uk
Mon Nov 29 10:23:50 EET 2004
On Mon, Nov 29, 2004 at 05:38:37AM +0200, fs wrote:
>
> Κοιτώντας το mkisofs manpage (hallo mr obvious!), υπάρχει το -print-size
> option το οποίο δίνει το σύνολο των blocks που θα εγγραφούν, το οποίο
> είναι σε 2048 byte block size χωρίς να πολυεξηγεί πως το κάνουν αυτό και
> απλά λέγοντας "αυτό γίνεται με ένα γρήγορο dry run των data"(είναι όντως
> άμεσο το output).
Το ποιο πιθανό είναι ότι το κάνει με τον εξής τρόπο (που θα έπρεπε
να εφαρμόζεις κι εσύ εξαρχής αντί να παιδεύεσαι τζάμπα):
1. Διαβάζει το μέγεθος σε byte του κάθε αρχείου ξεχωριστά.
2. Διαιρεί το μέγεθος αυτό με το block size του iso9660, και
στρογγυλοποιεί το αποτέλεσμα προς τα πάνω, για να βρει πόσα block θα
καταλάβει το αρχείο στο παραγόμενο σύστημα αρχείων.
3. Αθροίζει τα block που υπολόγισε για όλα τα αρχεία ξεχωριστά, και
αυτό ήταν.
Πρόσεξε ότι το block size του συστήματος αρχείων από το οποίο
προέρχονται τα δεδομένα είναι εκτός του υπολογισμού τελείως.
> Κοιτώντας το output του growisofs είναι ολοφάνερο ότι κάνουν το ίδιο test
> πριν το κανονικό 'mkisofs -R -J|' (γιατί πολύ απλά το output είναι
> καρμπόν). Επίσης ανάλογα με τη χρήση -R(rockridge) ή -J(joliet) το σύνολο
> των blocks αλλάζει.
Ε ναι, αφού το καθένα εξ αυτών χρειάζεται λίγο επιπλέον χώρο για τα
έξτρα μεταδεδομένα του, που λογικά όμως δεν είναι πολύς.
> Το θέμα είναι ότι:
>
> Άδειο DVD-R: 2297888 blocks
> (σύμφωνα με dvd+rw-mediainfo, btw 2295104 τα dvd+r και 4173825 τα dlayer)
Καλή φάση, δώσε χώρο στο λαό.
> Τest Dir: 2299336 2048 byte blocks
> (σύμφωνα με du)
Αδιάφορο, δες παρακάτω.
> Τest Dir: 2297605 blocks
> (σύμφωνα με mkisofs -print-size)
>
> Τελικό DVD-R: 2297042 2048byte blocks
> (σύμφωνα με du)
>
> Τελικό DVD-R: 2297605 blocks
> (σύμφωνα με mkisofs -print-size *όμοιο με προηγουμένως)
Αυτά προφανώς βγαίνουν λιγάκι διαφορετικά, γιατί το du σου αναφέρει
πόσα block πιάνουν τα αρχεία, ενώ το mkisofs τα συνολικά block του
συστήματος αρχείων, που περιλαμβάνουν και άλλα πράγματα.
> ???????????????/
Γενικά, το λάθος που έκανες ήταν ότι προσπαθούσες να βγάλεις άκρη
από την έξοδο της du· το θέμα είναι όμως ότι, όταν έχεις δυο συστήματα
αρχείων με διαφορετικό block size, άκρη δε βγαίνει. Π.χ., αν έχεις 100
αρχεία των 100 byte το καθένα, αυτά χρειάζονται 400kB με block size
4096, και 200kB με block size 2048· αντίθετα, αν έχεις αρχεία των 4000
byte, χρειάζονται τον ίδιο χώρο και στα δύο. Οπότε άκρη δε βγάζεις.
Αλλά ακόμα κι αυτό το μοντέλο είναι απλοποιημένο, και ισχύει για
«απλά» συστήματα αρχείων τύπου ext3. Το reiserfs κάνει διάφορα ωραία
κόλπα με τα μικρά αρχεία και το τελευταίο block των μεγαλυτέρων (tail
packing), οπότε η du στο συγκεκριμένο γενικά καταλήγει να αποτυγχάνει
τελείως.
Α, και άσε τις ιστορίες περί BSD, άλλο σύστημα αρχείων εκεί, το πολύ
πολύ να μπερδευτείς παραπάνω. ;^)
--
Vasilis Vasaitis
"A man is well or woe as he thinks himself so."
More information about the Linux-greek-users
mailing list