Подробный гайд: Монтирование устройства или раздела в режиме только для чтения (RO)

Гайд по монтированию в Linux в режиме только для чтения: команды mount, remount ro, fstab, bind, проверка и защита данных.

2026.08.14                  


Подробный гайд: Монтирование устройства или раздела в режиме только для чтения (RO)Подробный гайд: Монтирование устройства или раздела в режиме только для чтения (RO)

1. Что такое RO-монтирование

Режим ro означает, что файловая система смонтирована только для чтения:

  • файлы можно читать;
  • нельзя создавать, изменять, удалять файлы;
  • нельзя изменять метаданные файловой системы через обычные операции;
  • большинство программ получит ошибку при попытке записи.

Пример:

mount -o ro /dev/sdb1 /mnt

2. Быстрая шпаргалка

Смонтировать раздел только для чтения

sudo mkdir -p /mnt/ro
sudo mount -o ro /dev/sdb1 /mnt/ro



Проверить, что смонтировано RO

findmnt /mnt/ro

или:

mount | grep /mnt/ro

В опциях должно быть что-то вроде:

ro,noatime

Перемонтировать уже смонтированную ФС в RO

sudo mount -o remount,ro /mnt/ro

Размонтировать

sudo umount /mnt/ro

Если занято:

sudo fuser -mv /mnt/ro
sudo lsof +D /mnt/ro

3. Подготовка: определить устройство

Перед монтированием важно понять, какое устройство или раздел нужно монтировать.

Посмотреть блочные устройства

lsblk -f

Пример вывода:

NAME   FSTYPE LABEL UUID                                 MOUNTPOINT
sda
├─sda1 ext4         12345678-1234-1234-1234-123456789abc /
└─sdb1 xfs          87654321-4321-4321-4321-cba987654321

Посмотреть UUID

sudo blkid

Пример:

/dev/sdb1: UUID="87654321-4321-4321-4321-cba987654321" TYPE="xfs"

Посмотреть текущие монтирования

findmnt

или:

cat /proc/mounts

4. Монтирование обычного раздела в RO

Общая команда

sudo mkdir -p /mnt/ro
sudo mount -o ro /dev/sdXN /mnt/ro

Где:

  • /dev/sdXN — ваш раздел;
  • /mnt/ro — точка монтирования.

Пример:

sudo mkdir -p /mnt/ro
sudo mount -o ro /dev/sdb1 /mnt/ro

Проверка

findmnt /mnt/ro

Ожидаемый фрагмент опций:

ro

5. Монтирование по UUID вместо /dev/sdX

Использовать UUID надежнее, потому что имена устройств могут меняться.

Пример:

sudo mount -o ro UUID=87654321-4321-4321-4321-cba987654321 /mnt/ro

Узнать UUID:

sudo blkid /dev/sdb1

6. Монтирование конкретных файловых систем

ext2 / ext3 / ext4

sudo mount -t ext4 -o ro /dev/sdb1 /mnt/ro

Если файловая система повреждена, ядро может предложить или принудительно смонтировать ее read-only.

Иногда полезно добавить:

sudo mount -t ext4 -o ro,noload /dev/sdb1 /mnt/ro

Опция noload не воспроизводит журнал ext4. Это может быть полезно при forensic-анализе или поврежденной ФС, но файловая система может остаться в неконсистентном состоянии.

Для поврежденной ext4 также можно использовать:

sudo mount -t ext4 -o ro,errors=continue /dev/sdb1 /mnt/ro

Но лучше сначала сделать образ диска, если данные важны.


XFS

sudo mount -t xfs -o ro /dev/sdb1 /mnt/ro

Если XFS имеет грязный журнал, монтирование может потребовать восстановления.

В диагностических целях можно попробовать:

sudo mount -t xfs -o ro,norecovery /dev/sdb1 /mnt/ro

Внимание:

norecovery не выполняет восстановление журнала. Это может быть нужно для анализа, но не для обычной работы.


Btrfs

sudo mount -t btrfs -o ro /dev/sdb1 /mnt/ro

Если нужно смонтировать конкретный подтом:

sudo mount -t btrfs -o ro,subvol=@ /dev/sdb1 /mnt/ro

Посмотреть подтома:

sudo btrfs subvolume list /dev/sdb1

или, если том уже смонтирован:

btrfs subvolume list /mnt/ro

ISO-образ

ISO обычно монтируется через loop-устройство и является read-only по природе.

sudo mkdir -p /mnt/iso
sudo mount -o ro,loop /path/to/image.iso /mnt/iso

Пример:

sudo mount -o ro,loop ubuntu.iso /mnt/iso

SquashFS

SquashFS обычно уже является read-only.

sudo mount -t squashfs -o ro /path/to/file.squashfs /mnt/ro

FAT / exFAT / NTFS

Для FAT/exFAT:

sudo mount -t auto -o ro /dev/sdb1 /mnt/ro

Для NTFS в Linux часто используется ntfs-3g:

sudo mount -t ntfs-3g -o ro /dev/sdb1 /mnt/ro

Если нужно принудительно указать тип:

sudo mount -t ntfs3 -o ro /dev/sdb1 /mnt/ro

или:

sudo mount -t ntfs-3g -o ro /dev/sdb1 /mnt/ro

7. Перемонтирование в read-only

Если файловая система уже смонтирована в read-write, ее можно перемонтировать в read-only:

sudo mount -o remount,ro /mnt/point


Пример:

sudo mount -o remount,ro /mnt/data

Проверка:

findmnt /mnt/data

Если перемонтирование не удается

Причина обычно в том, что какая-то программа держит файлы открытыми для записи или точка монтирования используется как рабочая директория.

Посмотреть процессы:

sudo fuser -mv /mnt/data

или:

sudo lsof +D /mnt/data

Можно завершить процессы, но только если вы понимаете последствия.

Например:

sudo fuser -km /mnt/data

Внимание:

Это принудительно завершит процессы, использующие точку монтирования.


8. Перемонтирование корневой файловой системы в RO

Иногда нужно перевести корень в read-only, например для диагностики или аварийного восстановления.

sudo mount -o remount,ro /

Но на работающей системе это часто не получается, потому что корень активно используется. Если нужно безопасно перевести корень в RO:

1. Перейти в rescue/target или single-user mode:

sudo systemctl isolate rescue.target

2. Затем:

mount -o remount,ro /

Или загрузиться в recovery mode и выполнить:

mount -o remount,ro /

Если нужно снова в read-write:

mount -o remount,rw /

9. Монтирование RO через /etc/fstab

Если нужно, чтобы раздел всегда монтировался только для чтения, добавьте опцию ro в /etc/fstab.

Пример строки:

UUID=87654321-4321-4321-4321-cba987654321  /mnt/data  ext4  ro,noatime  0  2

или для XFS:

UUID=87654321-4321-4321-4321-cba987654321  /mnt/data  xfs  ro,noatime  0  0

После редактирования:

sudo systemctl daemon-reload
sudo mount -a

Или смонтировать конкретную точку:

sudo mount /mnt/data

Проверка:

findmnt /mnt/data

10. Монтирование через systemd mount unit

Альтернатива /etc/fstab — systemd mount-юниты.

Например, создайте файл:

sudo nano /etc/systemd/system/mnt-data.mount

Содержимое:

[Unit]
Description=Read-only data mount

[Mount]
What=/dev/disk/by-uuid/87654321-4321-4321-4321-cba987654321
Where=/mnt/data
Type=ext4
Options=ro,noatime

[Install]
WantedBy=multi-user.target

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

sudo nano /etc/systemd/system/mnt-data.automount

Содержимое:

[Unit]
Description=Automount read-only data

[Automount]
Where=/mnt/data

[Install]
WantedBy=multi-user.target

Применить:

sudo systemctl daemon-reload
sudo systemctl enable --now mnt-data.automount

Проверка:

findmnt /mnt/data

11. Read-only bind mount

Bind mount позволяет смонтировать уже существующую директорию в другое место.

Создать bind mount

sudo mount --bind /source/dir /mnt/bind

Сделать его read-only

sudo mount -o remount,ro,bind /mnt/bind

Важно:

Для read-only bind mount обычно нужно делать именно remount,ro,bind.


Пример полностью:

sudo mkdir -p /mnt/bind
sudo mount --bind /etc /mnt/bind
sudo mount -o remount,ro,bind /mnt/bind

Проверка:

findmnt /mnt/bind

В опциях должно быть что-то вроде:

ro,relatime

Нюанс bind mount

Иногда нужно явно указать:

sudo mount -o remount,ro,bind /mnt/bind

а не просто:

sudo mount -o remount,ro /mnt/bind

Потому что bind-монтирование имеет отдельный флаг bind.


12. Read-only loop mount файла

Если нужно смонтировать файл как блочное устройство только для чтения:

sudo mount -o ro,loop /path/to/file.img /mnt/ro

Пример:

sudo mount -o ro,loop disk.img /mnt/ro

Если нужно смонтировать конкретный раздел внутри образа, используйте offset.

Например, если раздел начинается с 1048576 байт:

sudo mount -o ro,loop,offset=1048576 disk.img /mnt/ro

Посмотреть разделы в образе:

fdisk -l disk.img

или:

parted disk.img unit B print



13. Монтирование LUKS-контейнера в режиме read-only

Если диск зашифрован LUKS, можно открыть его в read-only режиме.

Открыть LUKS как read-only

sudo cryptsetup --readonly open /dev/sdb1 secure_disk

Появится устройство:

/dev/mapper/secure_disk

Дальше монтируем:

sudo mkdir -p /mnt/ro
sudo mount -o ro /dev/mapper/secure_disk /mnt/ro

Закрыть

sudo umount /mnt/ro
sudo cryptsetup close secure_disk

14. Монтирование LVM в read-only

Для LVM можно активировать тома в read-only режиме.

Посмотреть volume groups

sudo vgs
sudo lvs

Активировать VG в read-only

sudo vgchange -ay --readonly vg_name

Затем смонтировать логический том:

sudo mount -o ro /dev/vg_name/lv_name /mnt/ro

Деактивировать

sudo umount /mnt/ro
sudo vgchange -an vg_name

15. Аппаратная или блочная защита от записи

Иногда нужно запретить запись на уровне блочного устройства.

Проверить статус read-only у блока

blockdev --getro /dev/sdb

Если вывод:

0

устройство доступно для записи.

Если:

1

устройство в режиме read-only.

Установить read-only на блочное устройство

sudo blockdev --setro /dev/sdb

Снять:

sudo blockdev --setrw /dev/sdb

Важно:

Это не всегда работает для всех устройств, особенно USB-флешек, SD-карт и некоторых аппаратных контроллеров.


16. Защита SD-карты или USB-устройства

Если SD-карта имеет физический переключатель Lock, переведите его в положение Lock. Тогда система не сможет писать на карту, если драйвер и картридер корректно обрабатывают этот переключатель.

Для USB-флешек аппаратная защита часто отсутствует, но можно использовать:

sudo blockdev --setro /dev/sdb

или udev-правила.


17. Udev-правило для автоматического RO

Можно создать правило, которое будет помечать конкретное устройство как read-only.

Создайте файл:

sudo nano /etc/udev/rules.d/99-readonly.rules

Пример для конкретного устройства по UUID:

ENV{ID_FS_UUID}=="87654321-4321-4321-4321-cba987654321", ENV{UDISKS_SYSTEM}="1", OPTIONS+="static_node=dm-0"

Но более практичный подход — использовать udev для установки атрибутов, если устройство их поддерживает.

Пример по модели/серийному номеру:

SUBSYSTEM=="block", ATTRS{model}=="YourDeviceModel", ATTR{ro}="1"

Проверить атрибуты устройства:

udevadm info -a -n /dev/sdb

Перезагрузить правила:

sudo udevadm control --reload-rules
sudo udevadm trigger

Не все устройства поддерживают запись в атрибут ro.


18. Проверка, что монтирование действительно RO

Проверка через findmnt

findmnt -o TARGET,SOURCE,FSTYPE,OPTIONS

Пример вывода:

TARGET     SOURCE     FSTYPE OPTIONS
/mnt/ro    /dev/sdb1  ext4   ro,noatime

Проверка через mount

mount | grep /mnt/ro

Проверка через /proc/mounts

grep /mnt/ro /proc/mounts

Попытка записи

touch /mnt/ro/testfile

Если ФС в RO, вы должны получить:

touch: cannot touch '/mnt/ro/testfile': Read-only file system

19. Типичные ошибки и их причины

Ошибка: mount: /mnt/ro: cannot mount; probably incompatible filesystem

Возможные причины:

  • неверный тип файловой системы;
  • поврежденная ФС;
  • отсутствует драйвер;
  • устройство не является тем, что вы думаете.

Что делать:

sudo blkid /dev/sdb1
sudo file -s /dev/sdb1
dmesg | tail

Ошибка: mount: /mnt/ro: wrong fs type, bad option, bad superblock

Проверьте устройство:

sudo blkid /dev/sdb1
sudo dmesg | tail

Если файловая система повреждена и данные важны, не запускайте агрессивное восстановление на оригинале.

Лучше сделать образ:

sudo ddrescue -f -n /dev/sdb1 /path/to/image.img /path/to/logfile.log


И работать уже с образом.


Ошибка: mount: /mnt/ro: permission denied

Нужны права root:

sudo mount -o ro /dev/sdb1 /mnt/ro

Ошибка: mount point is busy

При размонтировании или remount:

sudo fuser -mv /mnt/ro
sudo lsof +D /mnt/ro

Файловая система смонтирована RO, но некоторые файлы можно менять

Проверьте, нет ли отдельных bind mount, tmpfs или overlayfs поверх этой файловой системы.

findmnt -R /

Также проверьте:

cat /proc/mounts

20. RO и ошибки файловой системы

Для ext4 есть опции обработки ошибок:

  • errors=continue — продолжать работу после ошибок;
  • errors=remount-ro — перемонтировать в read-only при ошибках;
  • errors=panic — вызвать kernel panic при ошибках.

Пример:

sudo mount -o ro,errors=continue /dev/sdb1 /mnt/ro

В /etc/fstab:

UUID=... /mnt/data ext4 ro,errors=continue 0 2

21. Если нужно защитить данные на поврежденном диске

Если диск подозревается в неисправности, лучше не монтировать его в read-write вообще.

Рекомендуемый порядок:

  1. Не запускать fsck на оригинале, если данные важны.

2. Сделать посекторный образ:

sudo ddrescue -f -n /dev/sdb /path/to/image.img /path/to/rescue.log

3. Работать с образом:

sudo mount -o ro,loop /path/to/image.img /mnt/ro

Если в образе есть разделы:

sudo kpartx -av image.img

Затем монтировать появившиеся устройства:

sudo mount -o ro /dev/mapper/loop0p1 /mnt/ro

Убрать:

sudo umount /mnt/ro
sudo kpartx -dv image.img

22. Монтирование NFS в режиме read-only

Для NFS read-only можно задать на клиенте:

sudo mount -t nfs -o ro server:/export/share /mnt/ro

Пример:

sudo mount -t nfs -o ro 192.168.1.10:/srv/share /mnt/ro

Но важно понимать: ro на клиенте запрещает запись с этого клиента. Сервер может все равно разрешать запись другим клиентам.

В /etc/fstab:

server:/srv/share  /mnt/ro  nfs  ro,soft,timeo=30  0  0

23. Read-only в контейнерах и systemd

systemd service с read-only корнем

В unit-файле можно использовать:

[Service]
ReadOnlyPaths=/
ReadWritePaths=/var/lib/myapp

Или более жестко:

[Service]
ProtectSystem=strict
PrivateTmp=true
ReadWritePaths=/var/lib/myapp

Docker read-only container

docker run --read-only -it alpine sh

Если нужны временные каталоги для записи:

docker run --read-only \
  --tmpfs /tmp \
  --tmpfs /run \
  -it alpine sh

24. OverlayFS поверх read-only файловой системы

Иногда базовая файловая система делается read-only, а изменения сохраняются в верхний слой.

Пример:

sudo mount -t overlay overlay \
  -o lowerdir=/lower,upperdir=/upper,workdir=/work \
  overlay /mnt/merged

Где:

  • /lower — read-only слой;
  • /upper — слой для изменений;
  • /work — служебный каталог overlayfs;
  • /mnt/merged — итоговая точка монтирования.

Это полезно для embedded-систем, live-систем и защищенных киосков.


25. Разница между ro, nosuid, nodev, noexec

Опция ro не то же самое, что nosuid, nodev, noexec.

ro

Запрещает запись.

noexec

Запрещает исполнение файлов.

nosuid

Игнорирует set-user-ID и set-group-ID биты.


nodev

Запрещает интерпретацию специальных файлов устройств.

Пример безопасного монтирования:

sudo mount -o ro,noexec,nosuid,nodev /dev/sdb1 /mnt/ro

В /etc/fstab:

UUID=... /mnt/ro ext4 ro,noexec,nosuid,nodev 0 2

26. Пример полного сценария: подключить внешний диск RO

Допустим, появился внешний диск /dev/sdb1.

1. Смотрим устройство

lsblk -f
sudo blkid

2. Создаем точку монтирования

sudo mkdir -p /mnt/external-ro

3. Монтируем только для чтения

sudo mount -o ro,noexec,nosuid,nodev /dev/sdb1 /mnt/external-ro



4. Проверяем

findmnt /mnt/external-ro

5. Пробуем запись

touch /mnt/external-ro/test

Ожидаемая ошибка:

Read-only file system

6. Размонтируем

sudo umount /mnt/external-ro

27. Пример: сделать существующий каталог доступным только для чтения через bind

Исходный каталог:

/data/shared

Нужно предоставить его в /mnt/shared-ro только для чтения.

sudo mkdir -p /mnt/shared-ro
sudo mount --bind /data/shared /mnt/shared-ro
sudo mount -o remount,ro,bind /mnt/shared-ro

Проверка:

findmnt /mnt/shared-ro

Попытка записи:

touch /mnt/shared-ro/file

Должно быть:

Read-only file system

28. Пример: автоматически монтировать раздел RO при загрузке

Допустим, раздел:

/dev/sdb1

UUID:

87654321-4321-4321-4321-cba987654321

Точка монтирования:

/mnt/readonly

Создаем точку:

sudo mkdir -p /mnt/readonly

Редактируем:

sudo nano /etc/fstab

Добавляем:

UUID=87654321-4321-4321-4321-cba987654321  /mnt/readonly  ext4  ro,noatime,nosuid,nodev  0  2

Применяем:

sudo systemctl daemon-reload
sudo mount -a

Проверяем:

findmnt /mnt/readonly

29. Если нужно монтировать root filesystem в read-only постоянно

Это отдельная большая тема, потому что Linux ожидает возможность записи в /var, /tmp, /run, /etc и другие каталоги.

Обычно используют один из подходов:

Вариант 1: root RO + tmpfs для изменяемых каталогов

Например, /etc, /var, /tmp могут быть tmpfs или overlayfs.

Пример записи в /etc/fstab:

tmpfs  /tmp  tmpfs  defaults,noatime  0  0
tmpfs  /var/log  tmpfs  defaults,noatime  0  0
tmpfs  /var/tmp  tmpfs  defaults,noatime  0  0

Но это может сломать сервисы, которые ожидают сохранения логов и состояния.

Вариант 2: overlayfs

Базовый root read-only, изменения пишутся в отдельный слой.


Вариант 3: специализированные решения

Например:

  • OSTree;
  • immutable Linux;
  • read-only embedded rootfs;
  • initramfs-based setups;
  • LiveCD-style overlay.

30. Короткий ответ для большинства случаев

Если вам нужно просто смонтировать раздел только для чтения:

sudo mkdir -p /mnt/ro
sudo mount -o ro /dev/sdXN /mnt/ro

Проверить:

findmnt /mnt/ro

Размонтировать:

sudo umount /mnt/ro

Если нужно перемонтировать уже смонтированный раздел в RO:

sudo mount -o remount,ro /mnt/ro

Если нужно навсегда:

UUID=...  /mnt/ro  ext4  ro,noatime  0  2

в /etc/fstab.


Мы делимся этой технической информацией, чтобы помочь вам в решении задач — используйте её с пониманием. Статья носит рекомендательный характер, поэтому, пожалуйста, применяйте описанные методы осмотрительно.


Статью подготовил: Аверко Денис Сергеевич @Nymexis г. Омск (специалист по ЗИ)

Комментарии

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