Можно ли смонтировать элемент программного обеспечения/mdadm RAID 1 в сыром виде?

Замена lynxскриптом-оболочкой будет работать, если скрипты/программы вызывают lynxбез указания пути, поэтому система будет искать его в каталогах, перечисленных в переменной PATH.

Вы должны выяснить, где находится lynx, т.е. набрав type lynx.
Я предполагаю, что это может быть /usr/bin/lynx.

Переменная PATHдля скриптов/программ, вызывающих lynx, должна иметь другой каталог (, например./usr/local/bin)перед расположением lynx(, например./usr/bin). Если это не так, возможно, вам придется расширить PATH.

Пример:

Предположим, что ваш PATHустановлен на

PATH=/usr/bin:/bin:/sbin:/usr/bin/X11

Вы можете расширить его с помощью

PATH="/usr/local/bin:$PATH"

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

Затем вы можете создать сценарий оболочки /usr/local/bin/lynx, подобный этому:

#! /bin/sh

# Here you could do what is needed to get the user name and password for the
# proxy authentication and use these instead of hard coded values.

/usr/bin/lynx -pauth=proxyuserid:proxypass "$@"

Когда скрипт/программа хочет выполниться lynx foo bar, она найдет ваш скрипт /usr/local/bin/lynxраньше, чем найдет "настоящую рысь" в /usr/bin/lynx.

Затем скрипт вызовет /usr/bin/lynx -pauth=proxyuserid:proxypass "foo" "bar".

Конечно, вы можете использовать другое местоположение вместо /usr/local/bin.

Это решение скрипта-оболочки не будет работать, если скрипт/программа выполняет lynx с указанием пути, подобного /usr/bin/lynx foo bar. В таком случае вы можете переименовать /usr/bin/lynx, например, в. /usr/bin/lynx.realи создайте сценарий /usr/bin/lynx, вызывающий /usr/bin/lynx.realтаким же образом.

2
19.12.2019, 12:05
1 ответ

Для mdadm RAID 1 это возможно. Однако при этом (обход уровня RAID каким-либо образом )приведет к рассинхронизации дисков, что, в свою очередь, приведет к повреждению. Так что лучше монтировать только чтение -.

Определить смещение данных:

# mdadm --examine /dev/sda2
[...]
     Raid Level : raid1
[...]
    Data Offset : 2048 sectors
[...]

В данном случае это 2048 секторов.

Создайте (предпочтительно для чтения -только )петлевое устройство с этим смещением:

# losetup --find --show --offset=$((2048*512)) /dev/sda2
/dev/loop3

Установить:

# mount -o ro /dev/loop3 /mnt/somewhere

Создание и подключение петлевого устройства также можно выразить одной командой:

# mount -o ro,loop,offset=$((2048*512)) /dev/sda2 /mnt/somewhere

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

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


Для аппаратных и других типов RAID это зависит от формата. У многих RAID есть метаданные в конце, поэтому вы можете сделать те же шаги со смещением 0. В противном случае вам нужно как-то определить смещение данных.

Если на RAID нет файловой системы (cryptsetup, LVM,... )вы должны открыть эти слои перед шагом монтирования. Если устройство RAID разбито на разделы, петлевые устройства поддерживают разделы (losetup --partscan, тогда, например,./dev/loop3p1).

2
27.01.2020, 22:08

Теги

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