Как проверить, используется ли компакт-диск в настоящее время в Linux?

295
wintermuted

Как проверить, используется ли компакт-диск, прежде чем удалить его из виртуальной машины? В настоящее время он смонтирован в / dev / sr0 на машине с Ubuntu 14.04, и мне нужно размонтировать его для переноса хранилища данных.

Я знаю, что это не пишется, но мне нужно знать, если это читается из.

2
Какой гипервизор вы используете? Xyon 5 лет назад 1
vSphere, but I don't think it matters much. All I know is that VMWare tells me that it wants to unmount the disk when I try to remove it, but before I remove the CDs from my production machines I want to know if they CDs are being accessed actively. wintermuted 5 лет назад 0
Проще всего было бы сказать виртуальной машине Ubuntu размонтировать ее. Если это удастся, это * в настоящее время * не используется. dirkt 5 лет назад 0

1 ответ на вопрос

1
Austin Hemmelgarn

Единственный способ сделать это правильно - попытаться размонтировать компакт-диск внутри виртуальной машины.

Общая процедура, которую я обычно использую:

  1. Проверьте, монтируется ли он вообще, желательно запустить от имени пользователя root:

    grep /dev/sr0 /proc/self/mounts 

    Если это выплевывает какой-либо текст, то компакт-диск смонтирован и может использоваться (но его пока невозможно удалить, даже если он не используется), в противном случае вы можете предположить, что он не используется, если у вас не открыто программное обеспечение для записи компакт-дисков ,

  2. Попытайтесь размонтировать его (необходимо сделать как root):

    umount /dev/sr0 

    Если это произойдет без ошибок, в этот момент вы можете быть уверены, что компакт-диск не используется и можете безопасно удалить его на стороне гипервизора. Если он жалуется на /dev/sr0отсутствие монтирования, перепроверьте первый шаг, в противном случае переходите к следующему шагу.

  3. Выясните, что использовало его (также должно быть сделано от имени root, и вам, возможно, придется установить fuserкоманду):

    fuser -m $(grep /dev/sr0 /proc/self/mounts | cut -f 2) 

    Это выяснит, где он монтируется, а затем выложит одну строку для каждого используемого файла, начиная с имени файла, за которым следует разделенный пробелами список PID, которые используют файл. Затем вы можете посмотреть, к каким процессам относятся эти PID в большинстве программ мониторинга системы, например top. Если вас не волнует, что это такое, вы можете добавить -k -TERMперед -mэтой командой выше, и она отправит SIGTERM всем процессам за вас (эквивалентно вызову killкаждого PID). После того, как со всеми этим покончено, вы можете повторить шаг 2, и umountкоманда должна работать.

Обратите внимание, что в этом подходе предполагается, что пространства имен монтирования не задействованы, что обычно будет истинно, если вы не используете контейнеры (в этом случае вам может потребоваться выполнить все эти шаги в каждом работающем контейнере).