Короткий ответ

Сначала слой: (1) физический диск/LUN write-protect, (2) RAID VD в безопасном режиме, (3) ФС сама ушла в ro после I/O error, (4) админ/политика (fstab, chattr, diskpart readonly). На Ubuntu findmnt + dmesg. На Windows — Disk Management «Read-only» vs NTFS dirty. На TrueNAS — dataset readonly=on vs пул FAULTED. Пока в dmesg живые I/O error, mount -o remount,rw только допишет порчу.

Плейсхолдеры: том на vd0, пул tank, хост NAS01.

Симптомы и как отличить

Типичная картина:

  • touch: Read-only file system;
  • Windows: «Диск защищён от записи», SQL в suspect;
  • NFS клиент пишет, сервер EROFS;
  • iSCSI LUN после thin full стал ro в госте.
СлойПризнакНе путать
Ядро ext4/xfs remount-rodmesg I/O, Buffer I/O errorchmod, NFS root_squash
ZFS readonly importzpool get health, readonly=onquota 100% (это ENOSPC, часто ещё rw попытки)
NTFSfsutil volume diskfree, dirty bitшара SMB read-only ACL
Hardwarestorcli VD, disk lock«файлы стали ro у пользователя»
ThinENOSPC на пуле, пауза VMthin

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

  1. Media error, ядро errors=remount-ro.
  2. RAID контроллер: потеря BBU + политика force WT, или VD failed.
  3. LUN iSCSI/FC ушёл в read-only на СХД (реплика, snapshot, thin).
  4. Заполнен thin pool / ZFS 100% — часть стеков роняет запись.
  5. zfs set readonly=on, TrueNAS replication target.
  6. Windows: diskpart attributes disk set readonly, USB write-protect, политика.
  7. Гипервизор snapshot freeze «залип».
  8. Файловая система после crash ждёт fsck (не hw).

Диагностика

1. Ubuntu: опции монтирования и ядро

findmnt -o TARGET,SOURCE,FSTYPE,OPTIONS /
findmnt /mnt/data
dmesg -T | grep -iE 'i/o error|read-only|ext4|xfs|nvme|sd ' | tail -n 60
lsblk -o NAME,RO,TYPE,FSTYPE,MOUNTPOINT

RO=1 на блочном устройстве — слой диска/LUN, не только ФС. RO=0 + mount ro — ФС или fstab.

grep -v '^#' /etc/fstab
blockdev --getro /dev/sdX

2. RAID / SMART

storcli /c0/vall show
storcli /c0/eall/sall show

Dgrd + I/O error: выпал диск. Optimal + I/O: кабель, кэш, конкретный LUN.

SMART: интерпретация.

3. ZFS

zpool status tank
zfs get mounted,readonly,canmount tank tank/data
zpool get health,readonly tank

readonly=on на pool — импорт в ro (часто после ошибок или вручную). Checksum — отдельная ветка.

4. Windows Server

Get-Disk | Format-Table Number, OperationalStatus, HealthStatus, IsReadOnly, Size
Get-Volume | Format-Table DriveLetter, FileSystem, HealthStatus, SizeRemaining
Get-Disk | Where-Object IsReadOnly

IsReadOnly на диске ≠ NTFS permissions. Diskpart: attributes disk. Для iSCSI: сессия жива? Target не отдал LUN в RO.

5. TrueNAS

Storage → Pools: FAULTED vs ONLINE. Dataset options Readonly. Services не пишут в /mnt/tank/... если export ro. Журнал: dmesg, zpool status.

Решение

Сценарий A. I/O error, hardware

Снимите нагрузку. Не remount rw. Backup с другого реплика/снимка. Чините путь диска/RAID. Когда dmesg тих и RAID Optl — umount, fsck на копии или в maintenance, затем rw.

Сценарий B. Только fstab/readonly флаг

Ubuntu: уберите ro из fstab, mount -o remount,rw если нет I/O error.

zfs set readonly=off tank/data

Только если это политика, не защита после FAULT. TrueNAS GUI: снимите readonly на dataset-реплике, если это не target.

Сценарий C. Windows IsReadOnly

Set-Disk -Number 2 -IsReadOnly $false

После проверки, что это не корпоративный write-protect на реплике. Не на диске, который Disk Management показывает как чужой signature без нужды.

Сценарий D. Thin / место

Освободите пул, расширьте. Гости сами не «вылечат» RO, пока СХД не даёт write. См. ENOSPC статьи раздела.

Сценарий E. RAID cache / BBU

Контроллер мог отключить WB. Это не RO тома, но запись «как будто клинит». Смотрите WB/WT, не format C:.

Частый гибрид: Linux видит ro, Windows на iSCSI — «write protected». Это один SCSI sense с target. На TrueNAS проверьте, не сделали ли zvol/dataset readonly для реплики, не сел ли snapshot clone как prod path, не включили ли «Read Only» на iSCSI extent. Гость тогда честный: он не виноват.

Ещё слой — hypervisor freeze (VSS/fsfreeze) без thaw: диск гостя «застыл» на запись, хост жив. Смотрите задачи backup, зависшие agent. Remount rw внутри гостя не поможет, пока freeze не снимут.

Если NTFS dirty и Windows предлагает chkdsk при каждом boot, это не hardware RO, а журнал ФС. Сначала убедитесь, что LUN не 100% thin и RAID Optimal, затем штатный chkdsk в окне, не /r на 20 ТБ ночью без backup. Для Ubuntu xfs — xfs_repair только на umount; -L без копии не предлагайте.

Как проверить, что проблема устранена

touch / создание файла на томе. findmnt без ro. Windows: IsReadOnly False, SQL пишет. dmesg без новых I/O. ZFS readonly=off, zpool status ONLINE. Приложение (не только ping) записало данные и прочитало.

Если не помогло

  • rw есть, приложение всё равно EROFS: другой mount (bind, overlay, NFS).
  • Только один dataset ro: наследование ZFS, не весь tank.
  • iSCSI: initiator RO из-за SCSI write protect sense — смотрите TrueNAS zvol readonly / snapshot clone.
  • Кластер: том в RO на пассивной ноде — это норма до failover.

Профилактика

  • Мониторинг remount-ro, SMART, VD, free space thin.
  • UPS + CacheVault, не WB без батареи на учёте.
  • Не sync=disabled как лечение RO.
  • Реплика tank на второй NAS.
  • Документировать, какие dataset специально readonly.

FAQ

mount -o remount,rw сразу можно?

Только если причина — флаг, не I/O. Иначе нет.

Windows «write protected» на флешке и на vd0 — одно?

Нет. Аппаратный переключатель USB vs атрибут диска/политики. Для vd0 ищите Disk/IsReadOnly и SAN.

ZFS imported readonly — как вернуть rw?

Устраните причину FAULT, затем импорт без -o readonly=on. Не force с двух хостов.

Это защита от ransomware?

Иногда админы ставят ro на backup dataset — штатно. На проде SQL — нет, это авария.

Нужен ли chkdsk /r?

Не первым шагом на RAID-члене. Сначала слой блока. chkdsk на смонтированном системном томе — по процедуре Windows, не «на всякий с /r на ночь» без backup.