- RU.UNIX (2:5077/15.22) -------------------------------------------- RU.UNIX -
From : Aleksey Fedorov 2:5025/3.7 14 Apr 00 13:13:16
Subj : *bsd* disk size - размер конкретного слайса в разделе
-------------------------------------------------------------------------------
Hello Andy!
At 13 Apr 00 14:16:28, Andy Igoshin wrote to All:
[...]
AF>> ioctl DIOCGDINFO возвращает struct disklabel. Если надо посмотреть
AF>> размер конкретного слайса в разделе, то ioctl'у нужно подсовывать имя
AF>> раздела а не слайса и уже в struct disklabel искать что надо. Это
AF>> работает даже с псевдоустройствами vn. Единственное что требуется - это
AF>> чтобы на устройстве был записан disklabel.
AI> Леш, ты сам это делал, или в теории?
Я видел как это сделано в системе amass. У них там кеш в raw разделе.
AI> Я прежде чем в конфу писать уже получил
AI> по этому ioctl disklabel. Он _всегда_ возвращает _весь_ disklabel диска
AI> подсунь ему раздел или диск. Без какого-либо указания что именно подсунуто
AI> раздел или диск (или я такового указания не нашел).
Hужно сделать fstat. Из него можно узнать номер слайса.
AI> Как делают сами fbsd'шники я уже сюда написал.
Вот пример:
>===== Start cut [partsize.c] =====<
int get_part_size(int fd)
{
struct disklabel disklab;
struct stat statbuf;
int ret;
int partno;
int size;
if (fstat ( fd, &statbuf)==-1)
{
printf("Fstat failed; %sn",strerror(errno));
}
if (! S_ISCHR (statbuf.st_mode ))
{
printf("Not char special devicen");
return 0;
}