Имитация ошибок смонтированного тома, чтобы вызвать только чтение - PullRequest
0 голосов
/ 12 ноября 2018

Несколько дней назад мы столкнулись с неожиданной ошибкой, когда один из подключенных дисков на нашей машине RedHat linux стал только для чтения. Проблема была вызвана отключением сети в центре обработки данных.

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

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

Есть ли способ временно вызвать только чтение, если у меня есть root-доступ к машине (но нет доступа к гипервизору).

Этот том монтируется с помощью /etc/fstab. Вот запись:

UUID=abfe2bbb-a8b6-4ae0-b8da-727cc788838f /                     ext4    defaults        1 1
UUID=8c828be6-bf54-4fe6-b68a-eec863d80133       /opt/sunapp     ext4    rw 0 2

Вот выходные данные нескольких команд, которые показывают подробности о нашем смонтированном диске. Я могу добавить больше деталей по мере необходимости.

Выход fdisk -l

Disk /dev/vda: 268.4 GB, 268435456000 bytes, 524288000 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x0008ba5f

   Device Boot      Start         End      Blocks   Id  System
/dev/vda1   *        2048   524287966   262142959+  83  Linux

Disk /dev/vdb: 42.9 GB, 42949672960 bytes, 83886080 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

Вывод команды lsblk:

NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
vda    253:0    0   80G  0 disk 
└─vda1 253:1    0   80G  0 part /
vdb    253:16   0  250G  0 disk /opt/sunup

Вывод команды blkid:

/dev/vda1: UUID="abfe2bbb-a8b6-4ae0-b8da-727cc788838f" TYPE="ext4" 
/dev/sr0: UUID="2017-11-13-13-33-07-00" LABEL="config-2" TYPE="iso9660" 
/dev/vdb: UUID="8c828be6-bf54-4fe6-b68a-eec863d80133" TYPE="ext4" 

Вывод команды parted -l:

Warning: Unable to open /dev/sr0 read-write (Read-only file system).  /dev/sr0
has been opened read-only.
Error: /dev/sr0: unrecognised disk label
Model: QEMU QEMU DVD-ROM (scsi)                                           
Disk /dev/sr0: 461kB
Sector size (logical/physical): 2048B/2048B
Partition Table: unknown
Disk Flags: 

Model: Virtio Block Device (virtblk)
Disk /dev/vda: 268GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start   End    Size   Type     File system  Flags
 1      1049kB  268GB  268GB  primary  ext4         boot


Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 42.9GB
Sector size (logical/physical): 512B/512B
Partition Table: loop
Disk Flags: 

Number  Start  End     Size    File system  Flags
 1      0.00B  42.9GB  42.9GB  ext4

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

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

sudo ntfsfix /dev/vda
sudo ntfsfix /dev/vdb
0 голосов
/ 16 ноября 2018

Да, вы можете сделать это. Но предложенный здесь метод может привести к потере данных, поэтому используйте его только для тестирования.

Предположим, у вас /dev/vdb смонтировано как /opt/sunapp, сделайте следующее:

  1. Во-первых, размонтируйте его. Возможно, вам придется сначала закрыть все приложения, использующие его.
  2. Настройка устройства петли для зеркального отображения содержимого /dev/vdb:

    losetup /dev/loop0 /dev/vdb
    
  3. Затем смонтировать /dev/loop0 вместо /dev/vdb:

    mount /dev/loop0 /opt/sunapp -o rw,errors=remount-ro
    
  4. Теперь вы можете запустить ваше приложение. Когда пришло время сделать /opt/sunapp доступным только для чтения, используйте эту команду:

    blockdev --setro /dev/vdb
    

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

Чтобы восстановить все обратно, вам нужно размонтировать /opt/sunapp, отсоединить петлевое устройство и снова сделать /dev/vdb доступным для записи:

umount /opt/sunapp
losetup -d /dev/loop0
blockdev --setrw /dev/vdb
...