Автор Тема: Как получить список путей-файлов разделов накопителя-диска?  (Прочитано 2564 раз)

Оффлайн Taw

  • Участник
  • *
  • Сообщений: 16
В системе самому диску-накопителю соответствует некий файл устройства. Например,
    /dev/sda
Разделам на накопителе соответствует файл устройства
    /dev/sdaX

А как правильно получить эти имена файлов? В Shell скрипте, в Perl скрипте, или ещё как-то - Си, или др., код, может быть. Но лучше - Shell утилиты и Perl.

В вопросе есть ещё и второй слой. Совсем шикарно было бы знать, как получить имена не только для MBR, но и для GPT (Guided Partition Table). Но, для начала, хоть бы и про MBR узнать.

Есть тупой вариант ответа: распарсить вывод
     sudo fdisk -l /dev/sda
Это могу, но это трудоёмко и не очень-то это красиво. Хотя, для MBR, вполне себе вариант. Что-то ещё?

Можно
    sudo parted --list --machine /dev/sda
Этот вариант интереснее. Она работает с GPT, она выдаёт удобное для парсинга.

Как это вообще делают? Что смотреть?
« Последнее редактирование: 10.10.2013 10:39:50 от Taw »

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 20 159
    • Домашняя страница
В системе самому диску-накопителю соответствует некий файл устройства. Например,
    /dev/sda
Разделам на накопителе соответствует файл устройства
    /dev/sdaX

А как правильно получить эти имена файлов? В Shell скрипте, в Perl скрипте, или ещё как-то - Си, или др., код, может быть. Но лучше - Shell утилиты и Perl.
cat /proc/partitions
P.S. GPT под рукой нет, чтобы проверить.
Андрей Черепанов (cas@)

Оффлайн Taw

  • Участник
  • *
  • Сообщений: 16
cat /proc/partitions

Андрей, скажите, плиз, пару слов о том, где читнуть про "зачем этот файл в системе". Для чего предназначали разработчики.

Мне это интересно с точки зрения надёжности способа. Как я понимаю, драйверы бывают хитрые, имена неожиданные. Насколько этот файл "фундаментален"?
« Последнее редактирование: 10.10.2013 13:17:41 от Taw »

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 20 159
    • Домашняя страница
cat /proc/partitions

Андрей, скажите, плиз, пару слов о том, где читнуть про "зачем этот файл в системе". Для чего предназначали разработчики.
http://www.linuxforu.com/2012/03/device-drivers-kernel-window-peeping-through-proc/
Цитировать
Мне это интересно с точки зрения надёжности способа. Как я понимаю, драйверы бывают хитрые, имена неожиданные. Насколько этот файл "фундаментален"?
Это прямое API к ядру. Куда уж фундаментальнее. ;)
Андрей Черепанов (cas@)

Оффлайн Taw

  • Участник
  • *
  • Сообщений: 16
Как лучше сконструировать полный путь к файлу устройства?

Т.е. сами имена файлов есть. Начало пути - /dev - есть. Но полные пути бывают /dev/abcde/a0b0c1, например, для раздела 1.
« Последнее редактирование: 10.10.2013 13:23:37 от Taw »

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 20 159
    • Домашняя страница
Как лучше сконструировать полный путь к файлу устройства?

Т.е. сами имена файлов есть. Начало пути - /dev - есть. Но полные пути бывают /dev/abcde/a0b0c1, например, для раздела 1.
cat /proc/partitions | sed -ne '3,$ s,^.\{25\},/dev/,p'
Андрей Черепанов (cas@)

Оффлайн Taw

  • Участник
  • *
  • Сообщений: 16
Бывают полные пути /dev/abcde/a0b0c1, например.
« Последнее редактирование: 11.10.2013 10:22:04 от Taw »

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 20 159
    • Домашняя страница
Бывают полные пути /dev/abcde/a0b0c1, например.
Бывают. А как они отражены в /proc/partitions и смотрели ли вы симлинки на них в /dev?
Андрей Черепанов (cas@)

Оффлайн Taw

  • Участник
  • *
  • Сообщений: 16
Мне почти не доступно то железо. :(

Я подозреваю, что в некоторых списках эти пути могут включать в себя части родительских каталогов вплоть до /dev/*. Я подозреваю, в /proc/partitions должны быть уникальные имена. Но это всё предположения. Я подозреваю, что есть API для каких-то взаимодействий с драйверами контроллеров.

P.S. Можно исходники почитать, но пока я собираю аргументы в пользу траты или не траты времени на исходники.

Оффлайн Taw

  • Участник
  • *
  • Сообщений: 16
Есть вот такой ход:
sudo lshw -C disk -short
sudo lshw -C volume -short

Но, я думаю, надо использовать вот это:

sudo blockdev --report

man blockdev:
--report
all devices which appear in /proc/partitions are shown
« Последнее редактирование: 14.10.2013 09:03:30 от Taw »