几天前,我们遇到了一个意外错误,其中我们的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
解决方法
是的,你可以做到.但是这里提出的方法可能会导致数据丢失,因此仅将其用于测试.
假设您将/ dev / vdb挂载为/ opt / sunapp,请执行以下操作:
>首先,卸下它.您可能需要先关闭所有使用它的应用程序.
>配置循环设备以镜像/ dev / vdb的内容:
losetup /dev/loop0 /dev/vdb
>然后,挂载/ dev / loop0而不是/ dev / vdb:
mount /dev/loop0 /opt/sunapp -o rw,errors=remount-ro
>现在,您可以运行您的应用程序.当需要将/ opt / sunapp设为只读时,请使用以下命令:
blockdev --setro /dev/vdb
之后,尝试写入/ dev / loop0将导致I / O错误.一旦文件系统驱动程序检测到这一点,它就会将文件系统重新安装为只读.
要恢复所有内容,您需要卸载/ opt / sunapp,分离循环设备,并使/ dev / vdb再次可写:
umount /opt/sunapp losetup -d /dev/loop0 blockdev --setrw /dev/vdb