cp
не знает об открытых файлах. Таким образом, если первый пользователь загрузит большой файл, и cronjob (или любой другой процесс) начинает копировать этот файл, то он только скопирует столько, сколько был уже записан. Можно думать об этом таким образом - cp
делает копию того, что в настоящее время находится на диске, неважно, если файл завершен. Иначе Вы не могли скопировать файлы журнала, например.
Если это - Linux, мы говорим о, то я думаю, что можно достигнуть того, что Вы хотите использовать udev
создать символьную ссылку на Ваши устройства. Если Вы смотрите на /etc/udev/rules.d
, существует названный файл 70-persistent-cd.rules
чье содержание имеет строки как:
SUBSYSTEM=="block", ENV{ID_CDROM}=="?*", ENV{ID_PATH}=="pci-0000:00:1f.2-scsi-:0:0:0", SYMLINK+="cdrom", ENV{GENERATED}="1"
То, что это делает, является этим, создает символьную ссылку /dev/cdrom
к устройству, определенному его адресом шины PCI. Необходимо ли смочь выполнить то, что Вы хотите путем идентификации жесткого диска с помощью (число отсека? не извините никакой опыт там), и использование подобного синтаксиса к вышеупомянутому для добавления символьной ссылки как /dev/bay1
, например. Следующая статья о записи udev
правила могут быть полезными:
Примечание:
Благодаря ответу slm обратите внимание на то, что это решение делает маркировки характерными для отсеков жесткого диска, а не дисков в них. Таким образом, если Вы используете маркировки /dev/bay1
и /dev/bay2
и у Вас есть жесткий диск A в отсеке 1 и жесткий диск B в отсеке 2, затем /dev/bay1
относится к диску A и /dev/bay2
относится к диску B. По некоторым причинам, при свопинге A и дисков B Вы добираетесь /dev/bay1
обращение к диску B и /dev/bay2
обращение к диску A. От Вашего вопроса я полагаю, что это - Ваше намерение. Исправьте меня, если я неправ.
Ваш начальный вопрос уже имеет несколько хороших ответов, таким образом, я сфокусируюсь на предпосылках к Вашему вопросу, маркируя диски.
Я использую порядковый номер диска для печати маркировок для отсеков замены в горячем режиме - это - лучший способ к исключительно, и последовательно определяйте диск. Это не изменится, независимо от которого отсека, или который контроллер это включается к.
Вы не упоминаете, используете ли Вы Linux или некоторый другой Unix, но в Linux можно получить список дисков (и разделы, которые мы хотим исключить) с их брендом, моделью и порядковым номером путем заглядывания/dev/disk/by-id/каталог. Я нахожу следующий псевдоним удара полезным для этого:
alias list_disks='find /dev/disk/by-id/ -iname 'scsi-*' | grep -v -- -part | while read disk ; do echo $(readlink $disk | sed -e s:../../:: ) $(basename $disk); done'
(соответствие для scsi-*
находит все "подобные scsi" диски, включая диски SAS и SATA. в системах только с дисками SATA, ata-*
работал бы также),
например, в одной из моих систем сервера ZFS, это производит вывод как это:
# list_disks | sort sdb scsi-SATA_WDC_WD10EACS-00Z_WD-WCASJ2195141 sdc scsi-SATA_WDC_WD10EACS-00Z_WD-WCASJ2114122 sdd scsi-SATA_ST31000528AS_9VP4P4LN sde scsi-SATA_ST31000528AS_6VP3FWAG sdf scsi-SATA_ST31000528AS_9VP509T5 sdg scsi-SATA_ST31000528AS_9VP4RPXK sdh scsi-SATA_OCZ-VECTOR_OCZ-0974C023I4P2G1B8 sdi scsi-SATA_OCZ-VECTOR_OCZ-8RL5XW08536INH7R sdj scsi-SATA_ST31000528AS_9VP18CCV sdk scsi-SATA_WDC_WD10EARS-00Y_WD-WMAV50933036
Как Вы видите,/dev/disk/by-id список включает бренд каждого диска и номер модели, а также порядковый номер. Они - все диски SATA, включенные или порты SATA или порты SAS на контроллере SAS LSI 2008.
Если бы мне присоединили принтер маркировки, то было бы достаточно легко распечатать маркировки на основе вывода list_disks
. Я использовал старое ручное устройство записи маркировки вместо этого, потому что это - то, что я имел. Печатные маркировки содержат только порядковый номер без вида/модели (это достаточно, чтобы я определил диск, когда мне нужно к). Маркировки входят очень удобные, когда диск перестал работать и должен быть заменен.
alias list_disks='find /dev/disk/by-id/ -iname scsi-* -o -iname usb-* | grep -v -- -part | while read disk ; do echo $(basename $(readlink $disk)) $(basename $disk); done | sed -re "s/(usb|scsi)-// ; s/(SATA|Generic)_//" | sort'
. это находит диски usb также и избавляется от посторонних данных в выводе.
– cas
04.10.2013, 11:51
Вы не делаете e2label разделов, Вы e2label файловые системы. Те файловые системы могут быть на разделах на файлах, на целых дисках, на сетевых блочных устройствах... не важно.
Таким образом да, если существует ext2/3/4 файловая система непосредственно на /dev/sda
, можно маркировать его все равно как тот, который шел бы /dev/sda1
.
Теперь, если нет никакой файловой системы непосредственно на /dev/sda
но например, /dev/sda
делится (использующий GPT, MBR, LVM...) в несколько разделов, затем abviously не Вы не можете использовать e2label /dev/sda
.
В разделении GPT можно дать имена разделам, таким образом, Вы могли создать один сектор большой раздел с именем, чтобы помочь определить Ваш диск. Можно сделать это с c
команда в gdisk
.
Я предполагаю, что Ваша главная цель состоит в том, чтобы однозначно определить физический диск. К сожалению, я не полагаю, что существует стандартный способ маркировать диск тем же способом, которым можно маркировать файловую систему.
Один путь состоит в том, чтобы использовать номер модели диска и порядковый номер. В Linux можно получить те идентификаторы с hdparm -i /dev/sdX
. Хорошая вещь о порядковом номере состоит в том, что он мог бы быть уже распечатан на этикетке производителя. (Я предполагаю, что Вы главным образом заботитесь о Linux, так как Вы упомянули e2label
в Вашем вопросе. Если так, отредактируйте свой вопрос и добавьте тег Linux.)
Если Вы используете аппаратный RAID-контроллер, hdparm
не мог бы работать на Вас, в этом случае необходимо будет консультироваться инструментами командной строки RAID-контроллера вместо этого.
Если Вы хотите определить его чем-то в содержании диска, Вы могли использовать диск GUID, который хранится в заголовке таблицы разделов GPT (байты 56-71 из LBA 1). Это - произвольная случайная строка, а не маркировка по Вашему выбору, но это похоже на маркировку, в которой это является персистентным, пока Вы не решаете ударить таблицу разделов. В Linux Вы видите диск использование GUID gdisk -l /dev/sdX
.
Для ответа на вопрос, если возможно маркировать диск в противоположность разделу ответ нет. Я не знаю ни о каком методе, чтобы сделать так.
Можно использовать метод, обрисованный в общих чертах @JosephR, но понять, что эта установка системно-зависима, поэтому если бы необходимо было взять тот жесткий диск к другой системе, то "маркировка", он предложен, была бы потеряна. Это не связывается с диском никаким значимым способом.
Кстати, Вы видите маркировки и набор UUID для различных дисков с помощью blkid
команда.
$ blkid
/dev/sda1: LABEL="SYSTEM_DRV" UUID="XXXXXX" TYPE="ntfs"
/dev/sda2: LABEL="Windows7_OS" UUID="XXXXXX" TYPE="ntfs"
/dev/sda3: LABEL="Lenovo_Recovery" UUID="XXXX" TYPE="ntfs"
/dev/sda5: UUID="XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" TYPE="ext4"
/dev/sda6: UUID="XXXXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXXXfG93LA" TYPE="LVM2_member"
/dev/mapper/vg_grinchy-lv_root: UUID="XXXXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXXX" TYPE="ext4"
/dev/mapper/vg_grinchy-lv_swap: UUID="XXXXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXXX" TYPE="swap"
/dev/mapper/vg_grinchy-lv_home: UUID="XXXXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXXX" TYPE="ext4"
blkid
кажется, только перечисляет разделы не устройства, который не является тем, чем интересуется OP.
– Joseph R.
02.10.2013, 18:17
/dev/disk/by-id
и можно сделать это udev
- разработайте как показано в этом ответе.
– Tom Hale
11.01.2017, 06:51
Диск уже маркирован как sda
, sdb
, sdc
... Разделы затем маркированы, например, на sda
: sda1
, sda2
...
Можно перечислить все маркировки для дисков и разделов с ls /dev/sd*
На основе ответов я добрался (Спасибо парни!), кажется, нет никакого способа на самом деле маркировать диски, но только разделы. Таким образом, ответ, вероятно, является "НЕТ".
Я пойду с предложениями, предложенными @cas и @200_success: я продолжу работать порядковые номера дисков с этикеткой к дверям отсека.
Создание небольшого раздела на каждом диске только, чтобы смочь маркировать этот раздел (как предложено @Stephane Chazelas) является также опцией, но я думаю, что это слишком сбивало бы с толку кого-то еще, кому, возможно, придется обслужить систему в более позднее время.
Если вы ls /dev/disk-by-path/pci*
...
Вы определенно увидите PCI-путь для каждого отсека диска. Вам просто нужно использовать 1 известный диск, чтобы убедиться, что вы правильно указали метки.
Используйте blkid /dev/disk-by-path/pci*
чтобы увидеть, какие разделы дисков находятся на пути PCI.
Вы также можете монтировать по этому пути.
Мне нравится Решение @cas, но вот мой 2 ¢
for i in /dev/sd?
do
echo "$i"
/usr/sbin/smartctl -a "$i" | grep Serial
/usr/sbin/smartctl -a "$i" | grep "Device Model"
echo
done
Создайте правило udev
, используя гарантированный уникальный WWN диска (если он есть), в противном случае используйте объединенные идентификаторы поставщика и серийный ID:
Получите требуемые значения:
udevadm info -q all / dev / <ВАШЕ- УСТРОЙСТВО- ЗДЕСЬ> | egrep "(WWN | SERIAL | VENDOR_ID) ="
Помассируйте эти значения в udev
правила
, например:
ENV {DEVTYPE} == "disk", ENV {ID_WWN} == "0x5000c1cd31d48c87", SYMLINK + = "4TBseagate"
ENV {DEVTYPE} == "disk", ENV {ID_VENDOR_ID} == "0781", ENV {ID_SERIAL} == "SanDisk_Cruzer_Blade_4C530263101009 121490-0: 0", SYMLINK + = "8GBsandisk"
триггер udevadm
Для автоматического наименования символической ссылки с использованием значений, заданных udevadm info -q all / dev /
, вы можете использовать:
SYMLINK+="disk-$env{ID_VENDOR}-$env{ID_SERIAL_SHORT}"
Также возможно создать переменные ENV
из значений ATTRS
, чтобы получить более короткий уникальный идентификатор.
Существует возможность на пустом диске :использовать опцию -L для форматирования полного диска в режиме btrfs:
mkfs.btrfs -L MYLABEL /dev/sdz
затем заново создайте таблицу разделов...