Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2010-09-25 22:54:57

  Minio - Użyszkodnik

Minio
Użyszkodnik
Skąd: Poznań, Polska
Zarejestrowany: 2007-12-22
Serwis

[PARTIALLY-SOLVED] Jak spr. czy urządzenie jest partycją rozszerzoną?

Na kilka dni przed padem MySQL-a na forum założyłem wątek dotyczący sposobów na sprawdzenie czy urządzenie jest partycją rozszerzoną. „Problem” został właściwie rozwiązany, ale poruszam go ponownie z właściwie dwóch powodów:
1. Ktoś może mieć podobne pytanie i przy odrobinie szczęścia natknie się na ten post
2. Ktoś mądry mógł przegapić poprzedni wątek, a zauważyć ten i zdecydować się dodać swoje trzy grosze w temacie.

W tym poście znajduje się wiedza którą wyniosłem z poprzedniego wątku.
Kopia poprzedniego tematu na moim serwerze: extended-partition-dug.htm (z cache Google predzej czy później zostanie usunięta).

Na wstępie terminologia:
- partycja podstawowa jest partycją bezpośrednio zapisaną w tablicy partycji dysku. Dysk twardy może mieć maksymalnie cztery takie partycje.
- partycja rozszerzona jest partycją podstawową w obrębie której mogą znajdować się dodatkowe partycje
- partycja logiczna jest partycją która funkcjonuje w obrębie partycji rozszerzonej

Dotyczy to dysków z partycją tablicy zgodną z formatem MS-DOS. Istnieją inne formaty tablic partycji, jednak są rzadziej używane i przez to nas tutaj nie interesują.

Liczba minor (widoczna przy ls -l albo jako druga kolumna /proc/partitions) zwiększa się o 16, zaczynając od zera, z każdym kolejnym urządzeniem (sda -> sdb -> sdc). Sugeruje to że dysk może pomieścić maksymalnie 15 partycji (bo 0, 16, 32 etc. są zarezerwowane dla sdX bez numerka, czyli urządzenia którego i tak nie da się zamontować). Być może jest to zależne od jakieś opcji w konfiguracji kernela. Liczba ta w żaden sposób nie pomaga w określeniu czy urządzenie jest partycją rozszerzoną.

Istnieją przynajmniej trzy sposoby sprawdzenia czy urządzenie jest partycją rozszerzoną:

1. file -s na partycji rozszerzonej daje pewne informacje, stosunkowo podobne do tych które daje file -s na partycji z systemem plików NTFS, jednak wystarczająco odmienne żeby choćby grepem zdecydować czy ma się do czynienia z partycją rozszerzoną czy partycją NTFS
2. fdisk -l w przedostatniej kolumnie wypisuje liczebny identyfikator typu partycji. Partycjom rozszerzonym odpowiada liczba 5.
3. Dla partycji rozszerzonej trzecia kolumna w /proc/partitions (liczba bloków) najprawdopodobniej wynosi 1 (u mnie tak jest — nie jestem w stanie stwierdzić czy to specyfika mojego systemu czy ogólna zasada)

Każdy z tych sposób ma swoje wady.

Sposób trzeci zwróci false-positive dla partycji o wielkości jednego bloku (nie można wykluczyć ich istnienia, chociaż jest to bardzo mało prawdopodobne). Nie wiadomo też czy zawsze partycje rozszerzone mają wg partitions wielkość jednego bloku.

Sposób drugi nie zadziała na dyskach z tablicą partycji inną niż kompatybilna z MS-DOS (man 8 fdisk).

Sposób pierwszy i drugi są pewniejsze niż sposób trzeci, ale w przeciwieństwie do niego wymagają żeby użytkownik miał prawo odczytu pliku odpowiadającemu sprawdzanemu urządzeniu. Być może zazwyczaj nie jest to problemem, jednak u mnie było:

Kod:

minio@pingwin ~ ]:-> ls -lah /dev/sd*
brw-rw---- 1 root disk   8,  0 09-22 21:31 /dev/sda
brw-rw---- 1 root disk   8,  1 09-22 21:31 /dev/sda1
brw-rw---- 1 root disk   8,  2 09-22 21:31 /dev/sda2
brw-rw---- 1 root disk   8,  3 09-22 21:31 /dev/sda3
brw-rw---- 1 root disk   8,  4 09-22 21:31 /dev/sda4
brw-rw---- 1 root disk   8,  5 09-22 21:31 /dev/sda5
brw-rw---- 1 root disk   8,  6 09-22 21:31 /dev/sda6
brw-rw---- 1 root disk   8,  7 09-22 21:31 /dev/sda7
brw-rw---- 1 root floppy 8, 16 09-22 21:31 /dev/sdb
brw-rw---- 1 root floppy 8, 32 09-22 21:31 /dev/sdc
brw-rw---- 1 root floppy 8, 33 09-22 22:44 /dev/sdc1
brw-rw---- 1 root floppy 8, 34 09-22 21:31 /dev/sdc2
minio@pingwin ~ ]:-> groups 
minio cdrom floppy audio dip video plugdev netdev

Jak widać, urządzenia /dev/sda* (dysk twardy w laptopie) należały do grupy której członkiem nie był użytkownik. Problem ten rozwiązać można na trzy sposoby, z których każdy wymaga ingerencji ze strony superużytkownika:

1. dodanie regułki udev żeby urządzenia sda* były własnością grupy floppy lub innej do której należy zwykły użytkownik
2. dodanie użytkownika do grupy disk
3. modyfikacja pliku sudoers aby użytkownik mógł uruchamiać fdisk z uprawnieniami roota.

To chyba wszystko. Jeśli ktoś zna jeszcze jakiś sposób, polecam się wypowiedzieć w tym temacie.

Offline

 

#2  2010-09-25 23:10:31

  pink - Użytkownik

pink
Użytkownik
Skąd: P17PY93
Zarejestrowany: 2005-09-16

Re: [PARTIALLY-SOLVED] Jak spr. czy urządzenie jest partycją rozszerzoną?

Dla partycji rozszerzonej trzecia kolumna w /proc/partitions (liczba bloków) najprawdopodobniej wynosi 1

u mnie to samo.


T430 think-box 4.9-custom x86_64 Intel(R) Core(TM) i5-3230M CPU @ 2.60GHz GenuineIntel GNU/Linux
"Doktor plama i maharadża są pod złotym leszczem." "Człowieka od zwierzęcia odróżnia ciekawość świata. Patrze słucham i wyciągam wnioski."
https://www.behance.net/przemyslawmamon

Offline

 

#3  2010-09-25 23:30:40

  paoolo - Oldtimer

paoolo
Oldtimer
Skąd: Kraków
Zarejestrowany: 2006-05-20

Re: [PARTIALLY-SOLVED] Jak spr. czy urządzenie jest partycją rozszerzoną?

Był i nawet kod źródłowy programu do brute-force'owego sprawdzania która z liczb jest sumą dowolnej ilość pozostałych bez powtórzeń (czy jakoś tak: dyskretna się kłania :) Ale w przypadku /proc/partitions nie sprawdził się :/ Zaś fdisk (patrząc po źródłach) otwiera wskazany dysk, czyli jak @Minio napisał, dostęp do urządzenia blokowego jest potrzebny.

BTW @Minio: nie byłem w stanie wysłać Ci tego na PW - masz zapchaną skrzynkę i zwraca komunikat o błędzie.

Ostatnio edytowany przez paoolo (2010-09-25 23:31:46)

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Możesz wyłączyć AdBlock — tu nie ma reklam ;-)