sunsetting
Witam serdecznie.
Mam krótkie pytanie do Was. Jako, że nie udało mi się odnaleźć jednoznacznej odpowiedzi postanowiłem zapytać tutaj.
1. Co dzieje się z blokami oryginalnego pliku na dysku podczas gdy usuwamy hard link do niego? Czy są zwalniane?
2. Co dzieje się z blokami dysku podczas gdy usuwamy oryginalny plik, do którego wciąż istnieją hard linki?
3. Czy istnieje jakakolwiek sytuacja, w której po usunięciu oryginalnego pliku wciąż możemy mieć do niego dostęp poprzez link?
4. Czy w systemie UNIX w inode pliku przechowywany jest jego typ?
Co do wiekszości tych pytań mam pewne wyobrażenia wynikające z lektury manuala, aczkolwiek odpowiedzi nie jestem pewien, dlatego pytam
Z góry dziękuję za odpowiedź.
Rozumiem, ze wszystko Uniksow dotyczy i systemu plikow typu UFS, ExtX.
1) Nie sa zwalniane. Po usunieciu jednego takiego dowiazania jest zmniejszany o jeden licznik dowiazan do pliku, a gdy zmaleje do zera dopiero plik jest usuwany, Zmaleje do zera dopiero jak usuniemy oryginalny plik i wszystkie dowiazania do niego.
2) Dalej istnieje i wcale go w ten sposob nie usuwamy, Patrz punkt pierwszy.
3) Patrz punkt pierwszy i drugi ;p
4) Tak. Na wikipedii polskiej masz fajna tabelke pod haslem i-wezel.
Krotka odpowiedz, poniewaz dopiero wstalem. Jak potrzebujesz jakies szczegoly na ten temat to pytaj.
1) Nie sa zwalniane. Po usunieciu jednego takiego dowiazania jest zmniejszany o jeden licznik dowiazan do pliku, a gdy zmaleje do zera dopiero plik jest usuwany, Zmaleje do zera dopiero jak usuniemy oryginalny plik i wszystkie dowiazania do niego.
2) Dalej istnieje i wcale go w ten sposob nie usuwamy, Patrz punkt pierwszy. Rozumiem. Tylko zastanawia mnie jeszcze jedna rzecz. Czy dobrze rozumuję... Utworzenie hard link do pliku nie tworzy nowego inode (tak chyba mówił wykładowca, ręki uciąć sobie nie dam). Czyli gdy mamy oryginalny plik + dwa linki, istnieje tylko jeden inode. Ten, który należy do pliku oryginalnego. Następnie usuwamy oryginalny plik. Czy wtedy, posiadając te dwa linki do niego równocześnie nie istnieje inode pliku? Czy coś pomieszałem?
Dokladnie tak jak mowisz.
Hard link korzysta z tych samych danych co plik i z tego samego i-wezla.
Jak tworzysz plik, tworzony jest odpowiedni i-wezel zawierajacy typ, prawa i inne informacje o pliku, ale nie jest tworzony w momencie zrobienia twardego dowiazania.
Dwie glowne roznice miedzy dowiazaniem twardym, a symbolicznym polegaja na tym, ze zmieniajac prawa do dowiazania twardego zmieniasz takze prawa do pliku, na ktory wskazuje, czego nie mozna powiedziec o dowiazaniu symbolicznym. Natomiast druga roznica polega na tym, ze do twardego dowiazania odwolujesz sie tak samo jak do pliku, poniewaz wspoldziela zasoby, a dowiazanie symboliczne tylko wskazuje na plik.
Dobrze to obrazuje takiego cos:
Kod: touch plik
echo "ashdajsd" > plik
ln plik hard_link
ln -s plik soft_link
chmod 500 hard_link // zmieniaja sie prawa takze pliku
ls -l
rm plik // usuwamy plik
cat hard_link // zobaczysz plik
cat soft_link // nie zobaczysz pliku
edit: z ta zmiana praw chodzi mi o to, ze w przypadku dowiazania symbolicznego zmieniasz prawa do pliku, a nie do dowiazania jak to ma miejsce w przypadku twardego linku
Już rozumiem sytuację.
Tylko zastanawia mnie jeszcze jedna rzecz. Skoro mamy oryginalny plik oraz kilka hard linków, gdzie są te wszystkie ważne informacje z inode'a zawarte po usunięciu oryginalnego pliku, jak chociażby ilość dowiązań __u16 i_links_count? Czyżby sam inode był usuwany dopiero kiedy i_links_count przyjmie wartość 0 pomimo, że oryginalnego pliku już dawno nie ma?
Zgadza sie co widac doskonale na przykladzie, ktory dalem. Po skasowaniu pliku dalej za pomoca dowiazania twardego mozesz sie do jego danych odwolac. Natomiast sam plik dalej istnieje, tylko nie w postaci ikonki na ktora mozna kliknac, a danych na dysku i informacji o nim w pamieci Po skasowaniu tego dowiazania, jesli nie ma zadnych innych to kernel pozbedzie sie tych danych.
Teraz wszystko jasne. Dzięki za pomoc