Рейтинг:1

Как получить массив подключенных в данный момент (но не отформатированных/смонтированных) жестких дисков, отсортированных по размеру (но без данных о размерах в массиве)

флаг es

Мне нужен был способ запрограммировать монтирование жестких дисков в определенную точку монтирования. После некоторого просмотра я нашел: https://gist.github.com/trentmswanson/9c22bb71182e982bd36f

Это было для MS Azure и не охватывало определенные типы жестких дисков в инфраструктуре AWS.Он использовал sdf в нужном nvm. Я внес эти изменения, и результат сработал. У меня есть массив, содержащий точки монтирования:

# Пользовательские точки монтирования для первых 2 жестких дисков
typeset -A MountPoint
Точка монтирования[1]="/Данные Создателя Файла"
MountPoint[2]="/FileMakerData/Резервные копии"

и строка, которая пытается прочитать «этот» размер жесткого диска и смонтировать его соответствующим образом:

# Проверяет размер тома, чтобы проверить правильный размер диска
DiskSize=$(sudo fdisk -s ${DISK})

# Вычисляет количество ГБ и сбрасывает переменную как это число
пусть DiskSize=DiskSize/1048576

эхо "$размер диска"
# Использует размер диска для определения типа диска. 
# Предполагается, что резервный диск никогда не будет меньше 50 ГБ, а данные никогда не будут запускать GT 50 ГБ
если [ "$DiskSize" -lt 50 ]; 
затем DiskType="Данные"
Элиф ["$DiskSize" -ge 50 ];
затем DiskType="Резервное копирование"
фи

Затем функция получает точку монтирования из массива на основе значения.

get_next_mountpoint() {
    Тип устройства=${1}
    если (тест "$DeviceType" == "Данные"); затем эхо "${MountPoint[1]}"
    elif (тест "$DeviceType" == "Резервное копирование"); затем эхо "${MountPoint[2]}"
    еще
        # Эхо пусто, чтобы скрипт знал, что нужно выйти из цикла
        эхо ""
    фи
}

В сценарии гораздо больше. Однако проблема с этим процессом заключается в том, что жесткий диск, который будет подключен к /FileMakerData, должен быть сначала создан/подключен.

Когда я монтирую /FileMakerData/Backups, а затем монтирую /FileMakerData, я получаю один каталог в /FileMakerData с пометкой «потерянный + найденный». Это имеет смысл, поскольку я внезапно меняю середину структуры каталогов. Но я не могу найти способ перечислить жесткие диски, увеличив размер, чтобы, когда скрипт получает произвольный порядок из папок (поскольку AWS смонтировал их задом наперед), я все равно мог подключить диск правильного размера к правильной папке в правильном порядок.

Мой текущий код:

# Набор дисков, которые следует игнорировать при разбиении и форматировании; Используйте трубу для разделения (может действовать как ИЛИ в этом случае)
ЧЕРНЫЙ СПИСОК="/dev/nvme0"

# Получает список дисков, отфильтровывает перечисленные, а затем ищет другие
DEVS=($(ls -1 /dev/nvme*|egrep -v "${BLACKLIST}"|egrep "[0-9]n[0-9]$"))

Я нашел: https://linuxhint.com/list_disks_ubuntu/ Но он не говорит мне, как получить их в виде простого массива, и я также не могу сортировать по размеру с помощью этой команды.

Я пытался:

ls -1 /dev/nvme*|egrep -v "${BLACKLIST}"|egrep "[0-9]n[0-9]$" | Сортировать

и

ls -1 /dev/nvme*|egrep -v "${BLACKLIST}"|egrep "[0-9]n[0-9]$" | сортировать -r

но (как и ожидалось) это не сортируется по размеру. Он сортируется по переданному имени жесткого диска:

/dev/nvme1n1
/dev/nvme2n1 

и

/dev/nvme2n1
/dev/nvme1n1

Соответственно. Это именно то, что я хочу, просто отсортировано по размеру, а не по имени.

Другой поиск в Google не дал много полезной помощи для извлечения размера и сортировки основного значения по размеру. Я запускаю минимальную установку Ubuntu 18.04, так как это веб-сервер. У меня есть доступ к df и fdisk, и я пытаюсь установить еще много пакетов, но рассмотрю это, если это окажется значительно проще.

Рейтинг:1
флаг hr

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

Например:

$ lsblk -b --json | jq -r '
    .блокустройства[] | выберите (.name == "sda") |
    [ .дети[] | select(.mountpoint == null and .name != "sda4") ] | sort_by(.size) | .[].имя
'
sda1
sda2
Рейтинг:0
флаг cn

Я думаю, ты хочешь systemd.mount за это. Добавление x-systemd.requires-mounts-for= на ваш фстаб запись создает временную единицу монтирования:

# fstab(5):
/dev/loop1 /opt/mnt ext4 noauto 0 0  
/dev/loop2 /opt/mnt/data ext4 noauto,x-systemd.requires-mounts-for=/opt/mnt 0 0

который вы можете запускать и останавливать как systemd.unit:

запуск systemctl opt-mnt-data.mount

это смонтирует файловую систему в определенном порядке.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.