Αντιγράφοντας μεγάλα αρχεία σε UBS flash (π.χ. ISOs)...

Μου έχει τύχει πολλές φορές να βοηθάω χρήστες που προσπαθούν να boot-άρουν με κάποιο ISO που έγραψαν σε USB και το αρχείο να είναι corrupted. Το φαινόμενο είναι συχνό εξαιτίας του προβληματικού -κατά τη γνώμη μου- copy dialogue που εμφανίζεται και φεύγει πολύ γρήγορα, ενώ η αντιγραφή δεν έχει ολοκληρωθεί. Τι συμβαίνει; Στην πραγματικότητα όταν αντιγράφεις ένα αρχείο σε USB εμφανίζεται το copy dialogue με το progress bar της αντιγραφής. Όταν φτάσει στο 100% η αντιγραφή ολοκληρώθηκε, σωστά; Λάθος! Η αντιγραφή ολοκληρώθηκε στην cache και στην πραγματικότητα τα δεδομένα για να γραφτούν από την cache στο USB χρειάζονται από αρκετά δευτερόλεπτα έως και αρκετά λεπτά ανάλογα με το μέγεθος του αρχείου που αντιγράφουμε, την ταχύτητα του USB stick και τις προδιαγραφές του USB port που χρησιμοποιούμε.

Στο ακόλουθο video μπορείτε να δείτε το πρόβλημα

Ξέρω ξέρω πρέπει να κάνεις safe remove, ή να ανοίξεις terminal και να κάνεις sync κτλ. ή να απενεργοποιήσεις το caching, αλλά όλα αυτά ΔΕΝ είναι λύσεις. Ο χρήστης κάνει μια αντιγραφή στο UI προς το USB και θα πρέπει να ενημερώνεται για το πότε η αντιγραφή ολοκληρώνεται προς το USB και ΟΧΙ προς την cache. Ο χρήστης δεν ενδιαφέρεται για την cache και μπορεί να μην ξέρει και τι είναι η cache.

Σε κάθε περίπτωση πιστεύω ότι το progress bar θα έπρεπε να παραμένει μέχρι η αντιγραφή να ολοκληρωθεί στη φυσική μνήμη του USB και όχι στην write cache!

Τι γνώμη έχετε;

4 «Μου αρέσει»

δεν μου εχει τυχει ποτε. αν πας γρηγορα να κανεις αποπροσαρτηση,ακομα κι οταν η λήψη ή η αντιγραφει εχει τελειωσει, σου λεει “περιμενετε να γραφτουν δεδομενα στον οδηγο” . το η εμημερωση σβηστει ειναι ασφαλες.

1 «Μου αρέσει»

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

Πάντα κάνε αποπροσάρτηση της συσκευής, ακόμα και αν έχεις ώρες να τη χρησιμοποιήσεις, ποτέ δεν ξέρεις αν κάτι άλλο τη χρησιμοποιεί.

Με βάση τα παραπάνω θα μπορούσες να είχες μια σχετικά ποιο ακριβή μέτρηση αν είτε απενεργοποιούσες το buffer, κάτι που θα έκανε τη μεταφορά πολύ αργή, είτε να μετέφερες τα δεδομένα σταδιακά. Αλλά υπάρχουν στον υπολογιστή δυο τρόποι να μετρήσεις την οποιαδήποτε ταχύτητα. Η πραγματική μεταφορά και η φαινόμενη μεταφορά και πόσο ελαφρύ νοιώθεις το σύστημα. Σε μια ακραία κατάσταση φαντάσου αντί να αλλάξει το πρόγραμμα που τρέχει κάποιες χιλιάδες φορές το λεπτό να αλλάζει κάθε λεπτό. Ο υπολογιστής θα εκτελούσε τα πάντα πολύ γρηγορότερα, αλλά αν έκανε τον ποντίκι ένα λεπτό να μετακινηθεί δε θα μου έπαιρνε πολύ καιρό μέχρι να εκσφενδονιστεί απο το παράθυρο :slight_smile:

image

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

Για εκλείπεις μεταφορές, πχ διακοπή τροφοδοσίας ή ανυπόμονη αφαίρεση καλό είναι να έχει η συσκευή ένα journaling file system.

Συμπέρασμα: Η παρούσα συμπεριφορά είναι η αρκετά καλή με βάση τους τεχνολογικούς και άλλους περιορισμούς. .

[*] Τα παραπάνω είναι με βάση την ελλειπή κατανόηση μου, οπότε μην τα παίρνεις ως 100% αληθή.

Πιθανόν να έχει δίκιο. Πάντως στις δοκιμές μου, μόλις το IOSTAT σταματήσει να καταγράφει εγγραφές στο στικάκι, ΑΜΕΣΩΣ τσεκάρω το sha256 sum και το αρχείο είναι το σωστό. Το έχω τσεκάρει επανειλημμένα χωρίς καμία περίπτωση μη ολοκλήρωσης εγγραφής.

Εννοείται ότι το κάνω. Εγώ απλά ρίχνω την ιδέα “στον αέρα” ότι το UI στους file managers θα έπρεπε να εκτελεί ΑΥΤΟΜΑΤΑ ένα sync και μόνο όταν το sync ολοκληρωνόταν θα έκλεινα το progress bar, ώστε ο χρήστης να πάρει visual feedback ότι πράγματι η εγγραφή έχει ολοκληρωθεί. Νομίζω είναι πολύ απλή λύση.

1 «Μου αρέσει»

Αυτό δεν σημαίνει υποχρεωτικά κάτι. Η επικύρωση του sha256 πιθανά να γίνετε χωρίς καν να αναγνωστούν τα δεδομένα από τη συσκευή (κάτι που ίσως μπορείς να δεις με το usbtop με φορτωμένο το usbmon module) . Για σιγουριά πρέπει να δώσεις κάτι σαν nocache sha256 path (δεν το έχω χρησιμοποιήσει ποτέ). Αλλά ακόμα και αν τα δεδομένα έρθουν από το στικάκι αυτό μπορεί να μην έχει γράψει τα δεδομένα στη μνήμη flash αλλά μέρος τους να είναι σε κάποια προσωρινή μνήμη. Το στικάκι είναι ολόκληρος υπολογιστής με δικό του επεξεργαστή και λειτουργικό. Μόνο με αποπροσάρτηση μπορείς να είσαι 100% βέβαιος.

ΥΓ: Ισχύουν τα disclaimers της προηγούμενης μου απάντησης.

1 «Μου αρέσει»

Πολύ ενδιαφέρουσα συζήτηση! Μόλις τέσταρα αυτό που λες και έχεις δίκιο! Δοκίμασα δηλαδή να κάνω verify αρχείο που δεν είχε ολοκληρωθεί ακόμα η εγγραφή στην φυσική μνήμη του USB (είχε περάσει όμως όλο στην cache) και μου έδωσε σωστό sha256 sum. Να και κάτι που δεν ήξερα…

γι’αυτο σε τετοιες περιπτωσεις (iso, κλωνοι λειτουργικων, κλπ) χρησιμοποιω παντα την dd και μονο dd, με progress. αφου ολοκληρωθει παιρνω το checksum του αρχικου αρχειου πηγη και το περναω στο usb. συνδεω στη συνεχεια το usb σε αλλον υπολογιστη, με την dd αντιγραφω το αρχειο και το checksum απο το usb στον 2ο υπολογιστη (το κανω αυτο ετσι’κι’αλλιως για να εχω τριπλο backup). αφου ολοκληρωθει και αυτο, συγκρινω το checksum (που ειναι απο το αρχικο αρχειο πηγη) με το τελικο αρχειο που εχω στον 2ο υπολογιστη, αν με βγαλει ΟΚ, σημαινει οτι το τελικο αρχειο στον 2ο υπολογιστη ειναι ιδιο με το αρχικο αρχειο πηγη, αρα και το «ενδιαμεσο» αρχειο στο usb ειναι προφανως και αυτο σωστο