Plik dyskowy pamiętany poza dyskiem

0

Posiadam Windows XP SP2, program DMDE i WinHex.

Zjawisko, o którym piszę odkryłem przez przypadek.

Jest sobie dysk sformatowany. Na ten dysk kopiuję plik o wielkości kilkaset MB. Otwieram go między innymi w podglądzie zawartości pliku w Total Commander.

Potem, za pomocą WinHex lub DMDE, otwieram dysk do edycji, odnajduję sektor, w ktorym rozpoczyna się wcześniej przygotowany plik. Zmieniam zawartość kilku przypadkowych bajtów tego sektora, zatwierdzam i zamykam DMDE. Potem w Total Commander chcę obejrzeć zawartość pliku, który jest na tych sektorach, stwierdzam, że ta zawartość nie zmieniła się. Potem ponownie otwieram DMDE i widzę, że sektory, które edytowałem, są zmienione tak, jak ja zmieniłem. Na koniec ponownie w Total Commander otwieram plik i widzę, że nie ma w nim zmian.

Dopiero, jak zrestartuję system Windows, to wtedy, jak otwieram plik w Total Commander, to widze w nim oczekiwaną zmianę.

Z tego prostego eksperymentu wyciągnąłem wniosek, że po pierwszym otwarciu tego pliku, zawartość pliku jest przechowywana poza dyskiem do momentu restartu systemu, i jak otwieram podgląd pliku w Total Commanderze, to program odczytuje właśnie to miejsce poza dyskiem, a nie sam dysk. To jest przyczyna, z której plik nie aktualizował się od razu.

Wydaje mi się, że bufor dyskowy odpada, bo ten bufor ma najwyżej kilkanaście-kilkadziesiąt megabajtów.

Gdzie jest przechowywana zawartość otwieranych plików?

Jak ustawić system Windows, żeby nie tworzył tego dodatkowego obszaru i za każdym razem odczytywał plik z dysku, na którym jest on zapisany? Chodzi o to, żeby edycja sektorów, w których jest położony ten plik, skutkowała natychmiastową aktualizacją.

0
andrzejlisek napisał(a)

Wydaje mi się, że bufor dyskowy odpada, bo ten bufor ma najwyżej kilkanaście-kilkadziesiąt megabajtów.
Bufory mogą być duże, to raz, a dwa że nie wiesz i specjalnie nie masz kontroli nad tym, co w nich w danym momencie jest, a czego nie ma.
Tak, to bufor jest przyczyną.

Jak ustawić system Windows, żeby nie tworzył tego dodatkowego obszaru i za każdym razem
odczytywał plik z dysku, na którym jest on zapisany? Chodzi o to, żeby edycja sektorów, w których jest położony ten plik, skutkowała natychmiastową aktualizacją.
Na pewno nie ma takiej potrzeby. Jak chcesz edytować plik w heksach, to edytuj plik, a nie jakieś sektory.
Bo teraz w ten sposób naruszasz spójność systemu plików. Grzebanie po aktywnej, podmontowanej partycji to proszenie się o kłopoty - i właśnie natrafiłeś na jedną z łagodniejszych konsekwencji. A co jeśli systemowi akurat by się zachciało realokować ten sektor, i zapisując go zniszczyłbyś jakiś zupełnie inny plik?

0

to prawie na pewno cache dysku, on nie trzyma całego pliku tylko rzeczy do których się ostatnio odwoływałeś
nie wgłębiałem się w to nigdy, ale zdaje mi się że zmiany dopiero trafiłyby na dysk gdyby było ich więcej niż rozmiar cache czyli musiałbyś zmienić co najmniej 16 MB pliku (przy standardowym rozmiarze cache) żeby nadmiar zaczął się zapisywać a z tego co piszesz wynika że zmieniasz tylko parę bajtów więc nic dziwnego

spróbuj menedżer urządzeń -> ppm na twój dysk -> właściwości -> policies -> odznacz używanie cache

wszystko zacznie chodzić wolniej, ale aplikacja będzie raczej działać poprawnie
no poza tym że nie rozumiem tego co robisz ani po co to robisz :|

0

Nie sadze zeby cache dysku mial tu cos do gadania. WinHex/DMDE tez z niego na pewno korzystaja, gdyz IMHO, jest to cache w sprzecie, pomiedzy 'talerzami' a 'interfejsem szyny danych'.

A czemu nie zwykla pamiec wirtualna? edytor hex pod TotalCommander mógł sobie zrobic memmap tego pliku, calkowicie sensownie biorac pod uwage jego rozmiar, interesujace (=ostatnio uzywane) czesci pliku zostaly wrzucone do pamieci wirtualnej, zmapowane na sektor pamieci procesu i "juz". Dopoki kopie fragmentow pliku z pagefile'a nie wyleca, to wszystkie aplikacje siedzące tyłkami na normalnym API systemu beda widziec ten fragment pliku pobrany z page'a zamiast z dysku, natomiast WinHex/DMDE gadajace prawie bezposrednio z urzadzeniem dostaja dane 'wprost' z talerza (poprzez cache dysku, pal go licho)

0
quetzalcoatl napisał(a)

Nie sadze zeby cache dysku mial tu cos do gadania. WinHex/DMDE tez z niego na pewno korzystaja, gdyz IMHO, jest to cache w sprzecie, pomiedzy 'talerzami' a 'interfejsem szyny danych'.
Mowa była nie o fizycznym cache w dysku twardym (rzędu 2-8 MB), lecz o cache w RAM-ie, zarządzanym przez Windows (rzędu kilkudziesięciu MB w WinXP, kilkuset w WinVista)

A czemu nie zwykla pamiec wirtualna?
Trochę mieszasz bufory dyskowe z pamięcią wirtualną. Po co system miałby trzymać zawartość sektorów dysku w pliku wymiany (czyli na dysku) zamiast na dysku? To zupełnie nieopłacalne.

Już od czasów DOS-a większość zapisów nie idzie bezpośrednio na dysk - tylko z pewnym niedeterministycznym opóźnieniem. I wszystko działa przezroczysto, pod warunkiem że programy korzystają z systemowych funkcji do zapisu i odczytu na dysku, oraz pod warunkiem że nie wyrwiemy wtyczki z gniazdka - wtedy część ostatnich zapisów może zniknąć.
Program, który grzebie po sektorach fizycznego dysku najwyraźniej pomija cache (systemowy, nie wewnętrzny dysku) co w połączeniu z normalnym odczytem (z udziałem cache) skutkuje naruszeniem spójności danych.

1 użytkowników online, w tym zalogowanych: 0, gości: 1