Будет ли USB-ключ иметь одно и то же имя каждый раз, когда я его подключаю?

В некоторых разновидностях UNIX страница справочника комнаты указывает его как команду для удаления связи с файлом.
В UNIX файлы являются объектами в файловой системе под названием Inodes без имен или местоположения кроме идентификатора в файловой системе. Их имена являются ссылками на них в различных каталогах, которые являются типом файла, который индексирует файлы (или каталоги, так как они - файлы), которые перечислены в нем.
При удалении связи с файлом, подсчетом ссылок уменьшений файла, и когда это достигает 0, он на самом деле удален, так как он отмечен как свободный файловой системой и это - блоки/степени, отмечены свободные также.

Если у Вас была способность к комнате каталог, не удаляя связь с файлами в нем сначала, Вы достигнете точки, где Вы имеете inodes, на который ссылаются в Вашей файловой системе, но не можете быть получены доступ никакими нормальными средствами.
С тех пор существует ссылка на них согласно их подсчету ссылок, они не отмечены как удаленный и становятся потерянными файлами.
Это становится еще более сложным, когда потерянные "файлы" являются каталогами и увеличениями как таковыми потенциальная сумма потерянного устройства хранения данных в файловой системе.

Так комната-r был добавлен, как функция для упрощения жизни пользователей UNIX, в расходе стандарта "дух UNIX", поскольку это более сложно, чем классические утилиты UNIX, поскольку это убывает к каталогам и удаляет файлы в,

Кроме того, в раннее время UNIX, системы не имели большой памяти, и отображение рекурсивной структуры каталога действительно имело потерю производительности, и иногда было невозможно обойтись без разделения работы.

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

Для tl; толпа доктора:
Каталоги в UNIX являются типом файла, это правда, но так как информацию в них рассматривает по-другому система, поскольку это - метаданные файловой системы, команды, управляющие файлами, не могут работать над каталогами без изменения в их поведении для управления зависимыми метаданными также.

9
23.03.2018, 18:40
3 ответа

Хотя доступ к нему через / dev / sdXy является рискованным, более точную идентификацию можно выполнить с помощью UUID .

Поскольку вы упомянули (в какой-то момент) о замене USB-накопителя, для обеспечения совместимости вы можете идентифицировать свой USB-накопитель по этикетке. Для этого вы можете: / dev / disk / by-label / YourLabelHere .

Обратите внимание, что вам нужно установить метку для новой USB-флешки перед запуском скрипта, а также, / dev / disk / by-label доступен, только если (по крайней мере) одна USB-флешка подключен (в противном случае он будет удален).

Подробную информацию о том, как настроить ярлык USB, можно найти здесь: https://askubuntu.com/questions/194510/how-to-edit-label-of-usb-drive

6
27.01.2020, 20:07

Просто чтобы добавить к ответу @alextartan.

Я развернул свою собственную систему резервного копирования, которая использует USB-накопители для целей. Я должен быть уверен, что происходит. Поскольку UUID не очень удобны для пользователя, я полагаюсь на этикетки дисков.

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

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

Когда сценарии нуждаются в доступе к определенному разделу, я ищу имя устройства с помощью метки.

function get_dev {
  ## Return the device name of a partition
  ## In DEV
  ## Given its label
  ## Partition does not need to be mounted
  ## Usage get_dev <partition_label>
  ## Copyleft 04/28/2014 JPmicrosystems
  local LINE
  local VERBOSE=1  ## Verbose version
  local USAGE="ERROR Usage is: get_dev <partition_label>"
  unset DEV

  if [ -z "${1}" ]
  then
    (( VERBOSE )) && echo $USAGE
    return 1
  fi

  LINE=$(ls -l /dev/disk/by-label | grep " ${1} ")
  if (( $? ))
  then
    (( VERBOSE )) && echo "ERROR Partition [${1}] not found"
    return 1
  fi

  DEV="/dev/${LINE##*/}"
  return 0
}
0
27.01.2020, 20:07

Если можно использовать только grep , выполните переход следующим образом:

grep -Eo '[^ ]+:( *[0-9]*){9}' /proc/net/dev | grep -Eo '(: *[0-9]*|[0-9]*$)' | grep -o '[0-9]*'
137517672
9029195
  • Первое выражение печатает имя интерфейса + двоеточие, за которым следуют следующие 9 группы цифр.
  • Второе выражение извлекает только группы цифр, которым предшествует двоеточие или за которыми следует конец строки (первый и последний выбранные столбцы). Здесь строка разделяется на одну строку на соответствующий столбец.
  • Последнее выражение избавляется от ведущей двоеточия ( Ничего политического здесь ).

Как указывалось ранее, grep далеко не быть лучшим способом достижения этого.

-121--185412-

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

/dev/sde1 не удалось, и вскоре после этого /dev/sdf1 , большой вопрос, почему? Эти диски на самом деле плохи, вы проверили SMART и запустили самопроверку? Или это проблема с контроллером/кабелем/питанием, которую вы с тех пор устранили?

Если вы хотите использовать его безопасно, используйте следующий метод:

https://raid.wiki.kernel.org/index.php/Recovering_a_failed_software_RAID#Making_the_harddisks_read-only_using_an_overlay_file

, а затем соберите --force с помощью dev/sdc1/dev/sdd1/dev/sdf1 . (Два неповрежденных диска плюс диск, который не удался последним). Если она работает и файловая система на RAID была использована в момент сбоя, она будет выглядеть, как после отключения питания, и может потребоваться fsck (тем более, чтобы сделать это на уровне копирования на запись, так что вы можете отменить, если все пойдет не так).

-121--195543-

Вот как я решаю эту проблему, но в целом, как сказал вам Сато Кацура, вам нужно написать правило udev.

  1. Подключите устройство, проверьте, какое устройство оно получает (например, просматривая dmesg).
  2. При вызове суперпользователем udevadm info --запрос all/dev/sdc (или что угодно).
  3. Установите правило udev, вот пример для моей карманной книги. Поля ID _ SERIAL _ SHORT и ID _ FS _ UUID Я прочитал из информации на шаге 2:

     SUBSYSTEM = "block", ENV {ID _ SERIAL _ SHORT =} = "YTT440099.
    ПОДСИСТЕМА = «block», ENV {ID _ SERIAL _ SHORT} = «YT440900877400W000Y0,» ENV {ID _ FS _ UUID} = «9016-4EF8,» ENV {DEVTYPE} = = «диск», SYMLINK + = «pocketbook-sd», OWNER = «ingo»
    

    Я установил ВЛАДЕЛЬЦА здесь, что я могу установить его с моей главной учетной записью пользователя. Также с моей карманной книгой у меня нет разделов, но монтируйте обычные диски. При изменении разделов:

     ENV {ID _ PART _ ENTRY _ NUMBER} = «1», ENV {DEVTYPE} = = «partition»,
    

    для раздела Номер 1 в строках правил udev.

Правила udev находятся в /etc/udev/rules.d , если у вас есть разумная система.

  1. Теперь вы можете

     udevadm control --reload
    

    для перезагрузки правил и

     udevadm monitor
    

    для контроля того, что происходит на этапе 5.

  2. Плагут и плагин вашего USB-устройства (конечно, после демонтажа до, если вы установили это). Монитор должен информировать вас о новом устройстве при его инициализации.

  3. Проверьте, содержит ли /dev/ правильные символьные ссылки. В моем примере я получил следующее:

     brw-rw---- 1 ingo диск 8, 48 Авг 3 10:32 sdd
    brw-rw---- 1 ingo диск 8, 32 Авг 3 10:32 sdc
    lrwxrwxrwx 1 root root 3 Авг 3 10:32 pocketbook-sd - > sdd
    lrwxrwxrwx 1 корень корень 3 Авг 3 10:32 pocketbook - > sdc
    

Теперь можно определить постоянные правила с помощью symlinks /dev/pocketbook и /dev/pocketbook-sd или с помощью любых имен в поле SYMLINK файла правил udev.

3
27.01.2020, 20:07

Теги

Похожие вопросы