Mam skrypt zapasowy napisany w języku Python, który tworzy katalog docelowy przed skopiowaniem do niego katalogu źródłowego. Skonfigurowałem go tak, aby używał go /external-backup
jako miejsca docelowego, do którego podłączam zewnętrzny dysk twardy. Po prostu uruchomiłem skrypt bez włączania (lub montowania) dysku twardego i stwierdziłem, że działa on normalnie, chociaż tworzy kopię zapasową na wewnętrznym dysku twardym, na którym nie ma wystarczającej ilości miejsca do wykonania kopii zapasowej.
Moje pytanie brzmi: jak mogę sprawdzić, czy wolumin jest zamontowany we właściwym miejscu przed zapisaniem na nim? Jeśli wykryję, że /external-backup
nie jest zamontowany, mogę zapobiec zapisywaniu do niego.
Dodatkowe pytanie brzmi: dlaczego było to dozwolone, skoro system operacyjny wie, że katalog powinien znajdować się na innym urządzeniu, i co stałoby się z danymi (na wewnętrznym dysku twardym), czy powinienem później zamontować to urządzenie (zewnętrzny dysk twardy)? Oczywiście na tej samej ścieżce nie mogą znajdować się dwie kopie na różnych urządzeniach!
Z góry dziękuję!
/external-backup
nie znajduje się na urządzeniu zewnętrznym, tylko w nadrzędnym systemie plików. System wie tylko, co tomount
mówi, nie ma pojęcia, co powinno tam być. Nie ma nic specjalnego w „punkcie montowania” w systemie plików Unix. To tylko zwykły katalog.Aby uzyskać ostateczną odpowiedź na coś, co wie tylko jądro, zapytaj jądro:
Ten plik można odczytać / przeanalizować tak, jakby był normalnym plikiem przy użyciu dowolnych narzędzi. W tym Python. Przykład szybkiego i brudnego:
źródło
Najłatwiejszym sposobem sprawdzenia jest wywołanie
mount
za pomocąsubprocess
i sprawdzenie, czy tam się pojawi. Aby uzyskać dodatkowe środki, użyjos.readlink()
zawartości,/dev/disk/by-*
aby dowiedzieć się, które to urządzenie.źródło
mount
jest w najlepszym wypadku niechlujny. Co robimount
wyjście jeśli mam zamontowany/dev/evil device on tour
na/directory on which I mount devices
? Analiza wyników może być niewiarygodna w takich przypadkach ...Dodatkowa odpowiedź. Jeśli urządzenie zewnętrzne nie jest zamontowane, dane są zapisywane na partycji root na ścieżce
/external-backup
. Jeśli urządzenie zewnętrzne jest zamontowane, dane na partycji głównej nadal tam są, ale nie są osiągalne, ponieważ/external-backup
teraz wskazują na urządzenie zewnętrzne.źródło
Stare pytanie, ale pomyślałem, że i tak przyczynię się do rozwiązania (na podstawie odpowiedzi Dennisa Williamsona i Ignacio Vazquez-Abramsa ). Ponieważ używam go w środowisku innym niż Linux do sprawdzania montowanych katalogów zdalnych, nie można używać / proc i mtab i nie przeprowadzono żadnych dodatkowych kontroli:
Udoskonalenia mile widziane!
źródło
Plik / etc / mtab istnieje, aby poinformować Cię, co jest aktualnie zamontowane. Jest
getmntent
połączenie, ale nie sądzę, aby zostało wyeksportowane doos
modułu. Szybki i brudny? Otwórz / etc / mtab i podziel. Upewnij się, że urządzenie jest obecne w kolumnie 0, a docelowy punkt podłączenia w kolumnie 1 jest poprawny.źródło