Koduję niektóre operacje na poziomie bloku i chcę się upewnić, że nie będę bashować innych plików. Czy w systemie plików ext2/3/4 można przechowywać wiele plików w tym samym bloku? Moim pierwszym instynktem jest powiedzieć, że nie ma mowy, ale chciałem sprawdzić społeczność.Czy wiele plików może być przechowywanych w tym samym bloku?
Odpowiedz
Na to pytanie trudno odpowiedzieć. Może poprawna odpowiedź może być teoretycznie tak, ale w praktyce nie.
ext2/ext3
Mówiąc ext2 i ext3, SUPERBLOCK i iwęzłów konstrukcje zostały zaprojektowane, aby umożliwić bloki mają być podzielone. (Patrz: fs/ext2/ext2.h
i fs/ext3/ext3.h
)
krótki fragment fs/ext3/ext3.h
podane tutaj:
struct ext3_super_block {
/*00*/ __le32 s_inodes_count; /* Inodes count */
__le32 s_blocks_count; /* Blocks count */
__le32 s_r_blocks_count; /* Reserved blocks count */
__le32 s_free_blocks_count; /* Free blocks count */
/*10*/ __le32 s_free_inodes_count; /* Free inodes count */
__le32 s_first_data_block; /* First Data Block */
__le32 s_log_block_size; /* Block size */
__le32 s_log_frag_size; /* Fragment size */
// ...
struct ext3_inode {
__le16 i_mode; /* File mode */
__le16 i_uid; /* Low 16 bits of Owner Uid */
// ...
__le32 i_faddr; /* Fragment address */
Chociaż przygotowany do, przynajmniej w jądrze Linux (do wersji 3.13) fragmentacja blok nigdy nie został wdrożony, zmuszając rozmiar fragmentu być równe wielkości bloku. (Patrz fs/ext3/super.c
)
if (blocksize != sbi->s_frag_size) {
ext3_msg(sb, KERN_ERR,
"error: fragsize %lu != blocksize %u (unsupported)",
sbi->s_frag_size, blocksize);
goto failed_mount;
}
AFAIK GNU/Hurd nie realizuje rozdrobnienia blokowy ext2/3, jak również systemów plików. Najprawdopodobniej nie będzie żadnego systemu operacyjnego, który go implementuje.
Mimo to sprawdzenie s_log_frag_size
w superbloku przed rozpoczęciem operacji na poziomie bloku może nie być złym pomysłem, ponieważ będziesz po bezpiecznej stronie.
ext4
Z ext4 historia wohle staje się mniej uciążliwe, a ext4 nie zezwala na fragmentację blokowy więcej. Pole superblokowe używane do przechowywania rozmiaru fragmentu otrzymało nowe zadanie, a pole iode służące do przechowywania adresu fragmentu (o zmienionej nazwie na i_obso_faddr
) zostało oznaczone jako nieaktualne w źródłach.
- 1. Wiele rozszerzeń plików w tym samym katalogu przy użyciu Gulp
- 2. Jak przesłać wiele plików w tym samym czasie do plików w chmurze za pomocą Pythona?
- 3. Przesyłanie wielu plików w tym samym żądaniu
- 4. importowanie plików GO w tym samym folderze
- 5. Wiele UIAlertViews w tym samym widoku
- 6. Czy Sonar obsługuje wiele języków w tym samym projekcie?
- 7. Czy kontroler AngularJS może być dziedziczony z innego kontrolera w tym samym module?
- 8. Czy gulp-usemin może akceptować wiele plików?
- 9. Maksymalny numer pliku może przesłać php w tym samym czasie
- 10. Wiele-do-wielu na tym samym stole
- 11. Wiele klas relacji z tym samym typem
- 12. addClass - czy można dodać wiele klas na tym samym div?
- 13. Wywołanie CTE wiele razy w tym samym zapytaniu
- 14. WebRTC wiele strumieni wideo w tym samym peerConnection
- 15. Załaduj wiele kopii dll w tym samym procesie
- 16. Wiele witryn w wielu projektach na tym samym serwerze szyn
- 17. Dlaczego ochrona może być dostępna w tym samym pakiecie bez dziedziczenia w java?
- 18. dwóch kolumn nie może być null w tym samym czasie w sql
- 19. Złap wiele wyjątków w tym samym czasie w VB.NET
- 20. wiele języków w tym samym projekcie w IntelliL pomysł
- 21. Wiele znaczników na tym samym elemencie struktury Go
- 22. Jak wybrać wiele pól w tym samym rzędzie? (MySQL)
- 23. Czy można wykonać wiele procedur przechowywanych w ramach jednej operacji?
- 24. Jak złapać wiele wyjątków w tym samym czasie w Kotlin
- 25. Wiele sesji i wykresów w Tensorflow (w tym samym procesie)
- 26. Wiele interpreterów w języku Python używanych w tym samym projekcie?
- 27. Uruchamiaj równolegle wiele poleceń jednocześnie na tym samym terminalu.
- 28. Jak powinienem organizować wiele serwerów Express w tym samym systemie?
- 29. Ruby on Rails Wiele żądań HTTP w tym samym czasie?
- 30. Płótno HTML: wiele kresek getContext w tym samym czasie
niektóre systemy plików mają możliwość dzielenia bloku na mniejsze podbloków (I specjalnie Pamiętam uczy o FFS BSD mając taką możliwość, już w podstawowych kursach OS w Uni). Jednak nie ma pojęcia o systemach plików ext *. –
systemy plików ext *, używane w systemach operacyjnych * inx, alokują pełny blok (zwykle 4096 użytecznych bajtów), nawet jeśli potrzebują tylko 1 bajta nowego bloku. więc prosta odpowiedź brzmi NIE. TO ZNACZY. tylko jeden plik może być przechowywany na bloku dysku. (jednak warto przyjrzeć się archiwizacji, ponieważ oddziela ona serię programów od nagłówka, co pozwala na posiadanie więcej niż jednego programu na blok. – user3629249