首先,我们甚至不确定这是一个udev问题,但我们需要在某个地方开始询问…我们有一台日立光纤通道SAN服务器,为几台运行ubuntu server 12.04 amd64的机器提供服务。
为了映射的目的,我们使用udev生成的/ dev / disk / by-id标识符
... /dev/disk/by-id/scsi-1HITACHI_750505270125 /dev/disk/by-id/scsi-1HITACHI_750505270125-part1 /dev/disk/by-id/scsi-1HITACHI_750505270126 /dev/disk/by-id/scsi-1HITACHI_750505270126-part1 ...
最后4位数(0125,0126,0127 …)表示在Hitachi上创build的LUN,因此我们知道我们正在访问哪个物理卷。
我们发现了一个奇怪的问题,我们在LUN 125上有一个1.1T的卷,我们把它拆分成机舱侧的小块。 重新分配一个新的驱动器到服务器后,似乎卷大小被caching(请参阅1150.5 GB的大小)…
root@server1:~# fdisk -l /dev/disk/by-id/scsi-1HITACHI_750505270125 Disk /dev/disk/by-id/scsi-1HITACHI_750505270125: 1150.5 GB, 1150514364416 bytes 255 heads, 63 sectors/track, 139875 cylinders, total 2247098368 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 identifier: 0x00000000 Device Boot Start End Blocks Id System /dev/disk/by-id/scsi-1HITACHI_750505270125-part1 63 1048575999 524287968+ 83 Linux
奇怪的是,我们有相同的卷连接到不同的机器。 他们不活跃,但仍然可见。 我们看到了相同的行为,但在重新启动后,驱动器看起来应该如此(请参阅536.9 GB大小):
root@server2:~# fdisk -l /dev/disk/by-id/scsi-1HITACHI_750505270125 Disk /dev/disk/by-id/scsi-1HITACHI_750505270125: 536.9 GB, 536870912000 bytes 255 heads, 63 sectors/track, 65270 cylinders, total 1048576000 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 identifier: 0x00000000 Device Boot Start End Blocks Id System /dev/disk/by-id/scsi-1HITACHI_750505270125-part1 63 1048575999 524287968+ 83 Linux
有趣的是,我们将驱动器分区到第二个服务器(server2)上,第二个服务器的大小合适,而在第一个服务器(server1)上我们可以看到该分区,即使实际的驱动器大小仍然是旧的。 我们甚至格式化它,并将其挂载到server2上,写了一个txt文件,卸载它,重新挂载到server1上,当然,我们可以看到并访问txt文件。
看起来像某处caching卷大小的方式?
以防万一,分离和重新连接驱动器后,我们重新扫描LUN并运行udevadm trigger来刷新udev树…
我们不太喜欢使用具有这种差异的驱动器,如果我们需要重新启动以使系统显示真实大小,我们将失去热插拔的所有优点…任何想法如何发生,是否安全使用这些卷没有重新启动?
作为一个侧面的问题,当我们从光纤舱分离驱动器,我们运行udevadm trigger ,看起来像udev只是增加了新的驱动器(设备),但它不会删除设备已经不存在了……是应该的办法?
由于涉及多个层次,所以有几个命令可以起作用。
FC
为了简单地扫描公交线路:
echo "1" > /sys/class/fc_host/hostXYZ/issue_lip echo "- - -" > /sys/class/scsi_host/hostXYZ/scan
如果你提前知道公车/目标/伦,你可以说:
echo "btl" > /sys/class/scsi_host/hostXYZ/scan
你用巴士目标和lun号代替btl 。
一个SCSI特定的命令来更新磁盘的缩小/增大的大小是
echo 1 > /sys/block/sdX/device/rescan
您需要知道相应的驱动器规范名称,例如sda。
(显然你需要replacesda和0:0:0)
从该磁盘卸载所有的东西
从SCSI层删除
echo 1 > /sys/class/block/sda/device/delete
从FC层移除
echo 1 > /sys/class/fc_transport/target0\:0\:0/device/0\:0\:0\:0/delete
现在,您可以安全地将其从SAN中删除。