Jakie są konsekwencje dla systemu plików ext4, kiedy kończę cp
polecenie kopiowania , wpisując Ctrl+, Cgdy jest uruchomiony?
Czy system plików ulega uszkodzeniu? Czy przestrzeń partycji zajmowana przez niekompletny skopiowany plik jest nadal użyteczna po usunięciu?
A co najważniejsze, czy zakończenie cp
procesu jest bezpieczne?
files
filesystems
ext4
file-copy
Seninha
źródło
źródło
Odpowiedzi:
Jest to bezpieczne, ale oczywiście możesz nie ukończyć kopiowania.
Po uruchomieniu
cp
polecenia wywołuje syscall, które instruują jądro, aby tworzyło kopie pliku. Syscall to funkcja, którą może wywołać aplikacja, która żąda usługi z jądra, takiej jak odczyt lub zapis danych na dysk. Proces przestrzeni użytkownika po prostu czeka na zakończenie syscall. Gdybyś śledził połączenia, wyglądałoby to tak:Powtarza się to dla każdego pliku, który ma zostać skopiowany. Z powodu sposobu działania tych połączeń systemowych nie nastąpi uszkodzenie. Kiedy syscalli takie jak te są wprowadzane, sygnał śmiertelny zajmie tylko efekt po syscall została zakończona , nie jest uruchomiona. Z tego powodu wymuszone zabicie procesu spowoduje jego zakończenie dopiero po zakończeniu aktualnie działającego syscall. Oznacza to, że jądro, w którym znajduje się sterownik systemu plików, może zakończyć operacje, które musi wykonać, aby wprowadzić system plików w normalny stan. Wszelkie tego rodzaju operacje we / wy nigdy nie zostaną zakończone w trakcie operacji, co czyni je operacjami atomowymi.
Co ciekawe, dlatego takie polecenia
cp
mogą nie kończyć się natychmiast po ich zabiciu. Jeśli kopiujesz bardzo duży plik i go zabijesz, nawet przy użyciu SIGKILL, proces będzie nadal działał, aż do zakończenia bieżącego połączenia systemowego. W przypadku dużego pliku może to chwilę potrwać, ponieważ proces będzie w stanie nieprzerwanym.źródło
cp
sama. Posiada różne funkcje dostępu do plików, które wewnętrznie wykorzystują to jako wartość.cp
po SIGKILLINGU, nawet w przypadku dużych plików ... może czas tych nieprzerwanych operacji atomowych procesu jest zbyt krótki. Czy to samo wyjaśnienie działa w przypadku zabijaniadd
i innych procesów odczytu / zapisu na dysku?dd
, to zależy od tegobs
, co dla niego ustawiłeś. Jeśli jest to tylko 512 (domyślnie), to powinno zakończyć się szybko. Jeśli jest większy, może to potrwać nieco dłużej.Ponieważ
cp
jest to polecenie przestrzeni użytkownika, nie wpływa to na integralność systemu plików.Oczywiście musisz być przygotowany, że co najmniej jeden plik nie zostanie całkowicie skopiowany, jeśli zabijesz uruchamiany
cp
program.źródło
CAP_SYS_RAWIO
W systemie Linux lub równoważnym w innych systemach operacyjnych), które dają im bezpośredni dostęp do bazowego urządzenia systemu plików (np.sudo dd if=/dev/urandom of=/dev/sda1
) Mogą siać spustoszenie wszelkiego rodzaju.cp
byłby wystarczająco wadliwy, aby ulec uszkodzeniu po przerwaniu , prawdopodobnie zostałby również uszkodzony z ukończonegocp
zbyt ...