On Mon, Jun 16, 2008 at 06:03:25PM -0700, Alex M. wrote: > > On Jun 16, 4:29 pm, Mike Christie <[EMAIL PROTECTED]> wrote: > > Do: > > > > iscsiadm -m session -r $SID --rescan > > Doing a rescan doesn't appear to pick up the new size of the devices. > Having manually resized the filesystem on the target end, I now get > errors on the initiator since the filesystem extents are outside of > the apparent device extents.
That is not a iSCSI issue. It is the SCSI subsystem in the kernel. When you give the rescan command iscsiadm passes in '- - -' to the /sys/class/scsi_host/hostX/rescan which kicks off a kernel thread that re-scans for the LUNs. The logic in the kernel is that if it finds that a Scsi_Host with a LUN exists already it returns that one and doesn't do a full re-discover on it. So you have to delete the Scsi_Host from userland and then follow it with a rescan. But the reason this is done (and that the kernel doesn't do this automaticlly) is that this operation is very dangerous. If you don't unmount any of the filesystems on those block devices before you delete them, you will incur data corruption. > > > The above commands will rescan existing devices and add new ones. It > > will not remove old ones. > > As you said, rescans don't pick up deleted LUN's, so my only option > would be to delete the LUN on the target and then re-create it under a > _different_ LUN and then do a rescan. This is obviously not an ideal > solution as it's going to result in a large number of "zombie" LUNs on > the initiator as time goes on. You can delete the old block devices that have changed and do a SCSI rescan: You have to delete the old devices (well, this script deletes _ALL_ so that might not be that good): for disk in `find /sys/class/iscsi_session/session*/device/target*/*:*:*:*/delete ` do echo 1 > $disk done And then do the rescan: #iscsiadm -m session --rescan Unfortunatly this will delete _all_ of your block devices (sdc, sde, sdd, etc) that were provided. But it will pick up your new one after the rescan. You can fiddle with the for loop above and run 'sg_caps' on the block device, see if it has changed compared to /sys/block/sdX/device/size and if so delete it: scsi_sz=`sg_readcap /dev/sdko | grep address | sed s'/.*blocks=//'` kernel_sz=`cat /sys/block/sdko/device/block\:sdko/size` if (($scsi_sz==$kernel_sz)); then echo "Good." else echo "Do the deletion of the block device." echo 1 > /sys/block/sdko/device/delete fi Oh, please be carefull. These scripts will delete your block devices, so if you delete your root one or any other one that is used - you are screwed. Make sure you first unmount any of the filesystems on those block devices and sync it so that there are no outstanding I/Os. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "open-iscsi" group. To post to this group, send email to email@example.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/open-iscsi -~----------~----~----~----~------~----~------~--~---