Как определить свободное место на именованном диске? (Внешний жёсткий диск ч/з USB смонтирован правилами udev)

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

banjar
Сообщения: 3
ОС: разные

Как определить свободное место на именованном диске?

Сообщение banjar »

В Fedora (Constantine) с ядром 2.6.32 установлен udev-145. Подключается внешний жёсткий диск.
Подробности подключения:

Код: Выделить всё

SUBSYSTEMS=="usb" DRIVERS=="usb" ATTRS{configuration}=="USB Mass Storage" ATTRS{manufacturer}=="JMicron"

или для самого внешнего диска:

Код: Выделить всё

SUBSYSTEMS=="scsi" ATTRS{vendor}=="Hitachi " ATTRS{model}=="HDS721010KLA330 "

Создано правило, именующее это устройство при подключении, т.е. в части исполнения правила есть, например: NAME="HDHIT1TB"
Так надо для разработчика, категорически желающего разбираться только с именованными устройствами.
Проблема в том, что при дальнейшем монтировании такого диска df не отображает его. parted показывает раздел, но gparted не показывает ничего по факту существования этого устройства в системе.
Какие вообще существуют способы получения сведений по именованному блочному устройству, смонтированному в общую файловую систему правилами udev?
В udevadm info сведений о свободном/занятом пространстве нет.

Выглядит всё (о чём говорилось выше) вот так:

Код: Выделить всё

[dev]$ df -h

/dev/sda3             684G  640G  8,8G  99% /
tmpfs                 4,0G  260K  4,0G   1% /dev/shm
/dev/sda1             388M   63M  305M  18% /boot
/dev/sdb1             459G  351G   85G  81% /mnt/sdb

[dev]$ ls -al | grep hi

brw-rw----   1 root disk      8,  33 Дек  3 21:30 hita1t

[dev]$ lsusb | grep JMicron

Bus 002 Device 002: ID 152d:2336 JMicron Technology Corp. / JMicron USA Technology Corp.

[dev]$ cd /etc/udev/rules.d

[rules.d]$ cat ./10-hita1t.rules

SUBSYSTEMS=="usb", DRIVERS=="usb", ATTRS{idVendor}=="152d", ATTRS{idProduct}=="2336", ATTRS{serial}=="E002A4936E88", NAME="hita1t"
SUBSYSTEMS=="usb", DRIVERS=="usb", ATTRS{idVendor}=="152d", ATTRS{idProduct}=="2336", ATTRS{serial}=="E002A4936E88", RUN+="/bin/mount /dev/hita1t /mnt/hita1t"
SUBSYSTEMS=="usb", DRIVERS=="usb", ATTRS{idVendor}=="152d", ATTRS{idProduct}=="2336", ATTRS{serial}=="E002A4936E88", RUN+="/bin/mount --bind /mnt/hita1t/HITA1T /ftpserver/admin/hita1t"

[rules.d]$ cd /mnt/hita1t

[hita1t]$ ls -al

drwxr-xr-x  4 root    root     4096 Дек  3 20:37 .
drwxr-xr-x. 6 root    root     4096 Дек  3 19:10 ..
drwxr-xr-x  4 ftpuser ftpuser  4096 Дек  3 21:38 HITA1T
drwx------  2 root    root    16384 Дек  3 19:02 lost+found

[hita1t]# udevadm info -a -p $(udevadm info -q path -n /dev/hita1t)

...
looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb2/2-3/2-3:1.0/host6/target6:0:0/6:0:0:0':
    KERNELS=="6:0:0:0"
    SUBSYSTEMS=="scsi"
    DRIVERS=="sd"
    ATTRS{device_blocked}=="0"
    ATTRS{type}=="0"
    ATTRS{scsi_level}=="3"
    ATTRS{vendor}=="Hitachi "
    ATTRS{model}=="HDS721010KLA330 "
    ATTRS{rev}=="    "
    ATTRS{state}=="running"
    ATTRS{timeout}=="30"
    ATTRS{iocounterbits}=="32"
    ATTRS{iorequest_cnt}=="0x412020"
    ATTRS{iodone_cnt}=="0x41201f"
    ATTRS{ioerr_cnt}=="0x0"
    ATTRS{modalias}=="scsi:t-0x00"
    ATTRS{evt_media_change}=="0"
    ATTRS{dh_state}=="detached"
    ATTRS{queue_depth}=="1"
    ATTRS{queue_type}=="none"
    ATTRS{max_sectors}=="240"
...
looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb2/2-3':
    KERNELS=="2-3"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{configuration}=="USB Mass Storage"
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bmAttributes}=="c0"
    ATTRS{bMaxPower}=="  2mA"
    ATTRS{urbnum}=="83371665"
    ATTRS{idVendor}=="152d"
    ATTRS{idProduct}=="2336"
    ATTRS{bcdDevice}=="0100"
    ATTRS{bDeviceClass}=="00"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{speed}=="480"
    ATTRS{busnum}=="2"
    ATTRS{devnum}=="2"
    ATTRS{version}==" 2.00"
    ATTRS{maxchild}=="0"
    ATTRS{quirks}=="0x0"
    ATTRS{authorized}=="1"
    ATTRS{manufacturer}=="JMicron"
    ATTRS{product}=="JM20336 SATA, USB Combo"
    ATTRS{serial}=="E002A4936E88"
....

[hita1t]# df -h

/dev/sda3             684G  640G  8,8G  99% /
tmpfs                 4,0G  260K  4,0G   1% /dev/shm
/dev/sda1             388M   63M  305M  18% /boot
/dev/sdb1             459G  351G   85G  81% /mnt/sdb

[hita1t]# parted /dev/hita1t
...
(parted) print
....
1     0,00B   1000GB  1000GB  ext4
...
(parted) quit
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux

Re: Как определить свободное место на именованном диске?

Сообщение eddy »

mount тоже этот диск не отображает?
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
banjar
Сообщения: 3
ОС: разные

Re: Как определить свободное место на именованном диске?

Сообщение banjar »

eddy писал(а): ↑
04.12.2010 17:20
mount тоже этот диск не отображает?


Лишь bind почему-то:

Код: Выделить всё

mount -l
/dev/sda3 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/sda1 on /boot type ext3 (rw)
/dev/sdb1 on /mnt/sdb type ext3 (rw) [20100110]
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
/mnt/sdb/ftp on /ftpserver/admin/disk_sdb type none (rw,bind)
gvfs-fuse-daemon on /home/user/.gvfs type fuse.gvfs-fuse-daemon (rw,nosuid,nodev,user=user)
/mnt/hita1t/HITA1T on /ftpserver/admin/hita1t type none (rw,bind)


Диск смонтирован, каталог на нём "сбинден", всё крутится и вертится на отлично. Проблема лишь в том, что я не понимаю почему df на него не работает, gparted игнорирует.. И я не знаю элементарного способа определения размера занятого/свободного пространства. Просто полагаю, что с только с du (хорошо, что хоть эта команда отрабатывает правильно) можно влёгкую обмануться. Для меня всегда - df. Но для такого подключения его нет и я в ступоре. :(
Спасибо сказали:
shotdownsystem
Сообщения: 423
ОС: Basic command interpreter

Re: Как определить свободное место на именованном диске?

Сообщение shotdownsystem »

dd if=/dev/zero of=<your_disk>/testdf
stat testdf
rm -f testdf
puts ("Working, please wait...");while(1);
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux

Re: Как определить свободное место на именованном диске?

Сообщение eddy »

banjar, а зачем вы вообще так нестандартно с бедным USB-накопителем поступили? Они же всегда появляются как /dev/sdX, а у вас как-то все сильно намудрено...
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
banjar
Сообщения: 3
ОС: разные

Re: Как определить свободное место на именованном диске?

Сообщение banjar »

dd if=/dev/zero of=<your_disk>/testdf
stat testdf
rm -f testdf


Это можно сделать в бою, то есть потом. А сейчас я тренеруюсь на своих железках.

eddy писал(а): ↑
04.12.2010 20:30
banjar, а зачем вы вообще так нестандартно с бедным USB-накопителем поступили? Они же всегда появляются как /dev/sdX, а у вас как-то все сильно намудрено...

Вообще-то, когда автомонтирование не запрещено, то все эти флешки и внешние диски монтируются в /media. Если метки тома нет, а её о-очень часто не бывает, то, как вам известно, монтируются все они под уникальными идентификаторами. Как оказалось, именно это раздражает программистов. Им же надо, чтобы устройства монтировались киким-то определённым образом. Вот есть у него бокс с JMicron-ом и хочет, чтобы при любом вставленном диске в этот бокс автомонтирование происходило именно в такой-то каталог. Дальше этот каталог д.б. доступен по сети. Например, по ftp.. Но это детали.
Я уже начитался про то, что в правилах udev заместо NAME лучше использовать SYMLINK. Но всё равно не знаю почему при задании NAME не работает df. Где можно про это узнать, как найти внятное разъяснение этому факту ?
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux

Re: Как определить свободное место на именованном диске?

Сообщение eddy »

К сожалению, с этим вам помочь не могу: я яростный противник автоматического монтирования.
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Как определить свободное место на именованном диске?

Сообщение drBatty »

banjar писал(а): ↑
04.12.2010 21:36
Как оказалось, именно это раздражает программистов.

ну меня это тоже бесит.
имя задаётся tune2fs -L
В df это всё видно (у меня). Я не понимаю, почему федора не видит. УМВР.

Да, если метки нет, то слака их монтирует
/media/disk
/media/disk-1
и т.д.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
Ленивая Бестолочь
Бывший модератор
Сообщения: 2760
ОС: Debian; gentoo

Re: Как определить свободное место на именованном диске?

Сообщение Ленивая Бестолочь »

drBatty писал(а): ↑
04.12.2010 23:36
имя задаётся tune2fs -L
В df это всё видно (у меня). Я не понимаю, почему федора не видит. УМВР.

дык метка файловой системы и имя устройства в /dev с помощью udev - разные вещи.
Солнце садилось в море, а люди с неоконченным высшим образованием выбегали оттуда, думая, что море закипит.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Как определить свободное место на именованном диске?

Сообщение drBatty »

Ленивая Бестолоч... писал(а): ↑
04.12.2010 23:47
дык метка файловой системы и имя устройства в /dev с помощью udev - разные вещи.

ну какая разница, как оно названно в /dev/ ?
обращаться-то к нему придётся через /media/, а там имя будет совпадать с меткой. У меня во всяком случае совпадает.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
Ленивая Бестолочь
Бывший модератор
Сообщения: 2760
ОС: Debian; gentoo

Re: Как определить свободное место на именованном диске?

Сообщение Ленивая Бестолочь »

drBatty писал(а): ↑
04.12.2010 23:57
обращаться-то к нему придётся через /media/, а там имя будет совпадать с меткой. У меня во всяком случае совпадает.

дык у ТС вроде как метки ФС не стоят. вот и не совпадает ничего. он через udev хочет.
Солнце садилось в море, а люди с неоконченным высшим образованием выбегали оттуда, думая, что море закипит.
Спасибо сказали:
Аватара пользователя
Rootlexx
Бывший модератор
Сообщения: 4471
Статус: GNU generation
ОС: Debian GNU/Linux

Re: Как определить свободное место на именованном диске?

Сообщение Rootlexx »

banjar
Диск уже подключён при загрузке системы? Если да, то монтирование его файловой системы осуществляется непосредственно при запуске Udev, а в это время корневая файловая система ещё смонтирована в режиме "только чтение", и в /etc/mtab запись о монтируемой файловой системе не добавляется, но должна присутствовать после загрузки в /proc/mounts.
Возможные решения:
  • Использовать параметр ядра "rw", приводящий к монтированию корневой файловой системы сразу в режиме "чтение и запись", но это лишит вас возможности её проверки при загрузке.
  • Создать символическую ссылку /etc/mtab на /proc/mounts, но это приводит к потере некоторых параметров монтирования (вроде "user"), а loop-устройства не освобождаются надлежащим образом после обычного размонтирования, и придётся использовать опцию "-d" для umount или запускать потом losetup с аналогичной опцией.
  • Создать скрипт, запускающийся после перемонтирования корневой файловой системы в режим "чтение и запись" и синхронизирующий содержимое /etc/mtab с /proc/mounts с помощью mount с опцией "-f".

Что же касается df, то ей аргументом можно указать имя файла, и она покажет информацию о файловой системе, содержащей этот файл.
Спасибо сказали: