How to create dual bootable rootdg / disks with VERITAS Volume Manager (VxVM) enabled
Details:
NOTE: A similar procedure is described in TechNote 240279 (link available below under "Related Documents). However, in TechNote 240279 VxVM is disabled on the second bootable (backup) disk.
VxVM provides the ability to mirror the boot disk. But mirroring does not provide functionality to back out changes as any changes made to the original boot disk will be get updated to the mirror disk as well.
For instance, when installing a patch that makes the system unusable, sometimes the only solution is to rebuild the system, which causes a lot of down time.
To deal with this situation, it is better to have two sets of boot disks, both encapsulated, and to have independent rootdgs, updated by using ufsdump or similar types of utilities. The main concept used in this method is using the VxVM feature "Suppress a path from VxVM's view" which is available from VxVM 3.1.1 onwards.
The steps below explain how to configure and keep multiple operating system disks under Volume Manager control with root disk encapsulated, however, masking them from seeing each other.
Note: This procedure requires that the alternate boot disk be kept up to date by some utilities like ufsdump.
1. Install Solaris and required patches
In this case, the OS will be installed on c1t0d0 and mirrored on to c1t1d0.
Outputs after the fresh install was done:
# df -k
Filesystem kbytes used avail capacity Mounted on
/dev/dsk/c1t0d0s0 2177104 55736 2077826 3% /
/dev/dsk/c1t0d0s4 2052632 747814 1243240 38% /usr
/proc 0 0 0 0% /proc
fd 0 0 0 0% /dev/fd
mnttab 0 0 0 0% /etc/mnttab
/dev/dsk/c1t0d0s5 2052632 8244 1982810 1% /var
swap 509968 8 509960 1% /var/run
swap 509984 24 509960 1% /tmp
/dev/dsk/c1t0d0s3 2052632 2133 1988921 1% /opt
# prtvtoc /dev/rdsk/c1t0d0s0
* /dev/rdsk/c1t0d0s0 partition map
*
* Dimensions:
* 512 bytes/sector
* 474 sectors/track
* 2 tracks/cylinder
* 948 sectors/cylinder
* 18904 cylinders
* 18902 accessible cylinders
*
* Flags:
* 1: unmountable
* 10: read-only
*
* First Sector Last
* Partition Tag Flags Sector Count Sector Mount Directory
0 2 00 0 4448964 4448963 /
1 3 01 4448964 885432 5334395
2 5 00 0 17919096 17919095
3 0 00 5334396 4194900 9529295 /opt
4 4 00 9529296 4194900 13724195 /usr
5 7 00 13724196 4194900 17919095 /var
2. Install VRTS packages
3. Reboot
4. Encapsulate boot disk
5. State after encapsulation:
# vxdisk list
DEVICE TYPE DISK GROUP STATUS
c0t0d0s2 sliced - - error
c1t0d0s2 sliced root disk rootdg online
c1t1d0s2 sliced - - error
c1t2d0s2 sliced praedm01 praedg online
c1t3d0s2 sliced disk05 tempdg online
c1t4d0s2 sliced disk04 tempdg online
c1t6d0s2 sliced disk01 tempdg online
c1t8d0s2 sliced praedm02 praedg online
c1t9d0s2 sliced - - online
# df -k
Filesystem kbytes used avail capacity Mounted on
/dev/vx/dsk/rootvol 2177104 87655 2045907 5% /
/dev/vx/dsk/usr 2052632 782987 1208067 40% /usr
/proc 0 0 0 0% /proc
fd 0 0 0 0% /dev/fd
mnttab 0 0 0 0% /etc/mnttab
/dev/vx/dsk/var 2052632 13016 1978038 1% /var
swap 474968 0 474968 0% /var/run
swap 474992 24 474968 1% /tmp
/dev/vx/dsk/opt 2052632 44527 1946527 3% /opt
/dev/null 0 0 0 0% /dev/odm
# cat /etc/vx/vxvm.exclude
exclude_all 0
paths
#
controllers
#
product
#
pathgroups
#
#
# prtvtoc /dev/rdsk/c1t0d0s2
* /dev/rdsk/c1t0d0s1 partition map
*
* Dimensions:
* 512 bytes/sector
* 474 sectors/track
* 2 tracks/cylinder
* 948 sectors/cylinder
* 18904 cylinders
* 18902 accessible cylinders
*
* Flags:
* 1: unmountable
* 10: read-only
*
* Unallocated space:
* First Sector Last
* Sector Count Sector
* 4448964 4290518332 4294967295
* 17919096 4281497164 4448963
* 5334396 4194900 9529295
*
* First Sector Last
* Partition Tag Flags Sector Count Sector Mount Directory
0 2 00 0 4448964 4448963
1 3 01 4451808 882588 5334395
2 5 00 0 17919096 17919095
4 4 00 9529296 4194900 13724195
5 7 00 13724196 4194900 17919095
6 14 01 0 17919096 17919095
7 15 01 4448964 2844 4451807
# prtvtoc /dev/rdsk/c1t1d0s2
* /dev/rdsk/c1t1d0s2 partition map
*
* Dimensions:
* 512 bytes/sector
* 474 sectors/track
* 2 tracks/cylinder
* 948 sectors/cylinder
* 18904 cylinders
* 18902 accessible cylinders
*
* Flags:
* 1: unmountable
* 10: read-only
*
* Unallocated space:
* First Sector Last
* Sector Count Sector
* 0 17919096 17919095
*
* First Sector Last
* Partition Tag Flags Sector Count Sector Mount Directory
2 5 01 0 17919096 17919095
6. Mirroring the boot disk:
# vxdisksetup -i c1t1d0 puboffset=2843
# vxdg adddisk altroot=c1t1d0
# vxmirror root disk altroot
# vxprint -htg rootdg
DG NAME NCONFIG NLOG MINORS GROUP-ID
DM NAME DEVICE TYPE PRIVLEN PUBLEN STATE
RV NAME RLINK_CNT KSTATE STATE PRIMARY DATAVOLS SRL
RL NAME RVG KSTATE STATE REM_HOST REM_DG REM_RLNK
V NAME RVG KSTATE STATE LENGTH READPOL PREFPLEX UTYPE
PL NAME VOLUME KSTATE STATE LENGTH LAYOUT NCOL/WID MODE
SD NAME PLEX DISK DISKOFFS LENGTH [COL/]OFF DEVICE MODE
SV NAME PLEX VOLNAME NVOLLAYR LENGTH [COL/]OFF AM/NM MODE
DC NAME PARENTVOL LOGVOL
SP NAME SNAPVOL DCO
dg rootdg default default 0 1015122932.1025.sundar
dm altroot c1t1d0s2 sliced 2843 17916252 -
dm root disk c1t0d0s2 sliced 2843 17919095 -
sd rootdiskPriv - root disk 4448964 2843 PRIVATE c1t0d0 ENA
v opt - ENABLED ACTIVE 4194900 ROUND - gen
pl opt-01 opt ENABLED ACTIVE 4194900 CONCAT - RW
sd root disk-05 opt-01 root disk 5334395 4194900 0 c1t0d0 ENA
pl opt-02 opt ENABLED ACTIVE 4194900 CONCAT - RW
sd altroot-01 opt-02 altroot 0 4194900 0 c1t1d0 ENA
v rootvol - ENABLED ACTIVE 4448964 ROUND - root
pl rootvol-01 rootvol ENABLED ACTIVE 4448964 CONCAT - RW
sd root disk-B0 rootvol-01 root disk 4448963 1 0 c1t0d0 ENA
sd root disk-02 rootvol-01 root disk 0 4448963 1 c1t0d0 ENA
pl rootvol-02 rootvol ENABLED ACTIVE 4448964 CONCAT - RW
sd altroot-02 rootvol-02 altroot 4194900 4448964 0 c1t1d0 ENA
v swapvol - ENABLED ACTIVE 882588 ROUND - swap
pl swapvol-01 swapvol ENABLED ACTIVE 882588 CONCAT - RW
sd root disk-01 swapvol-01 root disk 4451807 882588 0 c1t0d0 ENA
pl swapvol-02 swapvol ENABLED ACTIVE 882588 CONCAT - RW
sd altroot-03 swapvol-02 altroot 8643864 882588 0 c1t1d0 ENA
v usr - ENABLED ACTIVE 4194900 ROUND - gen
pl usr-01 usr ENABLED ACTIVE 4194900 CONCAT - RW
sd root disk-04 usr-01 root disk 9529295 4194900 0 c1t0d0 ENA
pl usr-02 usr ENABLED ACTIVE 4194900 CONCAT - RW
sd altroot-04 usr-02 altroot 9526452 4194900 0 c1t1d0 ENA
v var - ENABLED ACTIVE 4194900 ROUND - gen
pl var-01 var ENABLED ACTIVE 4194900 CONCAT - RW
sd root disk-03 var-01 root disk 13724195 4194900 0 c1t0d0 ENA
pl var-02 var ENABLED ACTIVE 4194900 CONCAT - RW
sd altroot-05 var-02 altroot 13721352 4194900 0 c1t1d0 ENA
# Partition table of c1t1d0s2
Part Tag Flag Cylinders Size Blocks
0 root wm 4428 - 9120 2.12GB (4693/0/0) 4448964
1 swap wu 9121 - 10051 430.95MB (931/0/0) 882588
2 backup wu 0 - 18901 8.54GB (18902/0/0) 17919096
3 - wu 0 - 2 1.39MB (3/0/0) 2844
4 - wu 3 - 18901 8.54GB (18899/0/0) 17916252
5 unassigned wm 3 - 4427 2.00GB (4425/0/0) 4194900
6 usr wm 10052 - 14476 2.00GB (4425/0/0) 4194900
7 var wm 14477 - 18901 2.00GB (4425/0/0) 4194900
7. Remove the plex and the disk of c1t1d0:
# for i in `vxprint -htg rootdg|grep pl|grep 02|awk '{print $2}'`
> do
> vxplex -o rm dis $i
> done
# vxprint -htg rootdg|grep pl|grep 02
# vxdg rmdisk altroot
8 . Remove slice 3 and 4 from c1t1d0s2 so that Volume Manager private & public regions are removed from the disk, which will enable the disk to be encapsulated again ( step 16) without error.
9. Checking the integrity of the filesystem on c1t1d0s2:
# fsck /dev/rdsk/c1t1d0s0
** /dev/rdsk/c1t1d0s0
** Last Mounted on /
** Phase 1 - Check Blocks and Sizes
** Phase 2 - Check Pathnames
** Phase 3 - Check Connectivity
** Phase 4 - Check Reference Counts
** Phase 5 - Check Cyl groups
FILE SYSTEM STATE IN SUPERBLOCK IS WRONG; FIX? y
2798 files, 87660 used, 2089444 free (428 frags, 261127 blocks, 0.0% fragmentation)
# fsck /dev/rdsk/c1t1d0s5
** /dev/rdsk/c1t1d0s5
** Last Mounted on /opt
** Phase 1 - Check Blocks and Sizes
** Phase 2 - Check Pathnames
** Phase 3 - Check Connectivity
** Phase 4 - Check Reference Counts
** Phase 5 - Check Cyl groups
678 files, 44527 used, 2008105 free (433 frags, 250959 blocks, 0.0% fragmentation)
# fsck /dev/rdsk/c1t1d0s6
** /dev/rdsk/c1t1d0s6
** Last Mounted on /usr
** Phase 1 - Check Blocks and Sizes
** Phase 2 - Check Pathnames
** Phase 3 - Check Connectivity
** Phase 4 - Check Reference Counts
** Phase 5 - Check Cyl groups
37669 files, 782987 used, 1269645 free (2037 frags, 158451 blocks, 0.0% fragmentation)
# fsck /dev/rdsk/c1t1d0s7
** /dev/rdsk/c1t1d0s7
** Last Mounted on /var
** Phase 1 - Check Blocks and Sizes
** Phase 2 - Check Pathnames
** Phase 3 - Check Connectivity
** Phase 4 - Check Reference Counts
** Phase 5 - Check Cyl groups
3972 files, 13061 used, 2039571 free (379 frags, 254899 blocks, 0.0% fragmentation)
10. Set up the devaliases:
# vxeeprom devalias vx-root disk /pci@1f,0/pci@1/scsi@3,1/sd@0,0
# vxeeprom devalias vx-altboot /pci@1f,0/pci@1/scsi@3,1/sd@1,0
11. Disable VxVM on the alternate boot disk:
# mount /dev/dsk/c1t1d0s0 /mnt
# touch /mnt/etc/vx/reconfig.d/state.d/install-db
# cp -p /mnt/etc/vfstab.prevm /mnt/etc/vfstab.prevm.org
Edit the /mnt/etc/system file and comment the two lines:
* rootdev:/pseudo/vxio@0:0
* set vxio:vol_rootdev_is_volume=1
12. Edit the /mnt/etc/vx/vxvm.exclude and include the following lines in the "paths " section (i.e c1t1dos2 disk):
c1t0d0s2 /pci@1f,0/pci@1/scsi@3,1/sd@0,0
13. Edit the /etc/vx/vxvm.exclude and include the following lines in the "paths " section (i.e c1t0d0s2 disk):
c1t1d0s2 /pci@1f,0/pci@1/scsi@3,1/sd@1,0
14. Modify the /mnt/etc/vfstab to look similar to this to point the device files to the correct mount points:
# cat /etc/vfstab
#device device mount FS fsck mount mount
#to mount to fsck point type pass at boot options
#
#/dev/dsk/c1d0s2 /dev/rdsk/c1d0s2 /usr ufs 1 yes -
fd - /dev/fd fd - no -
/proc - /proc proc - no -
/dev/dsk/c1t1d0s1 - - swap - no -
/dev/dsk/c1t1d0s0 /dev/rdsk/c1t1d0s0 / ufs 1 no -
/dev/dsk/c1t1d0s6 /dev/rdsk/c1t1d0s6 /usr ufs 1 no -
/dev/dsk/c1t1d0s5 /dev/rdsk/c1t1d0s5 /opt ufs 2 yes -
/dev/dsk/c1t1d0s7 /dev/rdsk/c1t1d0s7 /var ufs 1 no -
swap - /tmp tmpfs - yes -
/dev/odm - /dev/odm odm - yes -
15. Reboot the system with the alternate disk:
# df -k
Filesystem kbytes used avail capacity Mounted on
/dev/dsk/c1t1d0s0 2177104 87662 2045900 5% /
/dev/dsk/c1t1d0s6 2052632 782987 1208067 40% /usr
/proc 0 0 0 0% /proc
fd 0 0 0 0% /dev/fd
mnttab 0 0 0 0% /etc/mnttab
/dev/dsk/c1t1d0s7 2052632 13114 1977940 1% /var
swap 497120 8 497112 1% /var/run
swap 497128 16 497112 1% /tmp
/dev/dsk/c1t1d0s5 2052632 44527 1946527 3% /opt
/dev/null 0 0 0 0% /dev/odm
#
16. Run vxinstall and encapsulate c1t1d0.
Once c1t1d0 is encapsulated, you will have two independent rootdgs existing on the system, but one does not know the other and boots off from any of the disks.
Note : at the "ok" prompt boot using the alias for the Alternate boot disk.
To sync up the disks, set up a cron job similar to this:
# cat altsync.sh
#! /bin/sh
# sync rootvol
cp -p /mnt/etc/vx/vxvm.exclude /mnt/etc/vx/vxvm.exclude.org
mount /dev/dsk/c1t1d0s0 /mnt
ufsdump 0f - /dev/vx/rdsk/rootvol | (cd /mnt;ufsrestore xf -)
cp -p /mnt/etc/vx/vxvm.exclude.org /mnt/etc/vx/vxvm.exclude
Note: ufsdump will update the /etc/vx/vxvm.exclude on the c1t1d0 disk, so put these extra "cp" lines before and after the ufsdump statements.
The same is true for the other volumes.
see ufsdump(1M) for more details.
Note : It would be better to have a good backup of both boot disks once things are functioning well.
ok devalias
screen /pci@1f,0/pci@1,1/SUNW,m64B@2
vx-root disk /pci@1f,0/pci@1/scsi@3,1/disk@0,0:a
vx-altroot /pci@1f,0/pci@1/scsi@3,1/disk@1,0:a
Rebooting with command: boot vx-root disk
Boot device: /pci@1f,0/pci@1/scsi@3,1/disk@0,0:a File and args:
Loading ufs-file-system package 1.4 04 Aug 1995 13:02:54.
FCode UFS Reader 1.11 97/07/10 16:19:15.
Loading: /platform/SUNW,Ultra-5_10/ufsboot
Loading: /platform/sun4u/ufsboot
SunOS Release 5.8 Version Generic_108528-09 64-bit
Copyright 1983-2001 Sun Microsystems, Inc. All rights reserved.
WARNING: forceload of drv/scsi failed
WARNING: forceload of drv/pci failed
Starting VxVM restore daemon...
VxVM starting in boot mode...
configuring IPv4 interfaces: hme0.
Hostname: sundar
VxVM starting special volumes ( swapvol var )...
VxVM general startup...
The system is coming up. Please wait.
checking ufs filesystems
/dev/vx/rdsk/opt: is clean.
starting rpc services: rpcbind done.
Setting netmask of hme0 to 255.255.248.0
Setting default IPv4 interface for multicast: add net 224.0/4: gateway sundar
syslog service starting.
Print services started.
volume management starting.
Starting RMI Registry
Starting VERITAS VM Storage Administrator Command Server
checking : /usr/sbin/luxadm
checking : /usr/lib/liba5k.so.2
checking : /usr/lib/libg_fc.so.2
checking : /usr/lib/sparcv9/liba5k.so.2
checking : /usr/lib/sparcv9/libg_fc.so.2
Starting VERITAS VM Storage Administrator Server
The system is ready.
# vxdisk list
DEVICE TYPE DISK GROUP STATUS
c1t0d0s2 sliced root disk rootdg online
c1t2d0s2 sliced praedm01 praedg online
c1t3d0s2 sliced disk05 tempdg online
c1t4d0s2 sliced disk04 tempdg online
c1t6d0s2 sliced disk01 tempdg online
c1t8d0s2 sliced praedm02 praedg online
c1t9d0s2 sliced - - online
# vxprint -htqg rootdg
dg rootdg default default 0 1015122932.1025.sundar
dm root disk c1t0d0s2 sliced 2843 17919095 -
sd rootdiskPriv - root disk 4448964 2843 PRIVATE c1t0d0 ENA
v opt - ENABLED ACTIVE 4194900 ROUND - gen
pl opt-01 opt ENABLED ACTIVE 4194900 CONCAT - RW
sd root disk-05 opt-01 root disk 5334395 4194900 0 c1t0d0 ENA
v rootvol - ENABLED ACTIVE 4448964 ROUND - root
pl rootvol-01 rootvol ENABLED ACTIVE 4448964 CONCAT - RW
sd root disk-B0 rootvol-01 root disk 4448963 1 0 c1t0d0 ENA
sd root disk-02 rootvol-01 root disk 0 4448963 1 c1t0d0 ENA
v swapvol - ENABLED ACTIVE 882588 ROUND - swap
pl swapvol-01 swapvol ENABLED ACTIVE 882588 CONCAT - RW
sd root disk-01 swapvol-01 root disk 4451807 882588 0 c1t0d0 ENA
v usr - ENABLED ACTIVE 4194900 ROUND - gen
pl usr-01 usr ENABLED ACTIVE 4194900 CONCAT - RW
sd root disk-04 usr-01 root disk 9529295 4194900 0 c1t0d0 ENA
v var - ENABLED ACTIVE 4194900 ROUND - gen
pl var-01 var ENABLED ACTIVE 4194900 CONCAT - RW
sd root disk-03 var-01 root disk 13724195 4194900 0 c1t0d0 ENA
Booting from the alternate disk:
Rebooting with command: boot vx-altroot
Boot device: /pci@1f,0/pci@1/scsi@3,1/disk@1,0:a File and args:
Loading ufs-file-system package 1.4 04 Aug 1995 13:02:54.
FCode UFS Reader 1.11 97/07/10 16:19:15.
Loading: /platform/SUNW,Ultra-5_10/ufsboot
Loading: /platform/sun4u/ufsboot
SunOS Release 5.8 Version Generic_108528-09 64-bit
Copyright 1983-2001 Sun Microsystems, Inc. All rights reserved.
WARNING: forceload of drv/scsi failed
WARNING: forceload of drv/pci failed
Starting VxVM restore daemon...
VxVM starting in boot mode...
configuring IPv4 interfaces: hme0.
Hostname: sundar
VxVM starting special volumes ( swapvol var )...
VxVM general startup...
The system is coming up. Please wait.
checking ufs filesystems
/dev/vx/rdsk/opt: is clean.
starting rpc services: rpcbind done.
Setting netmask of hme0 to 255.255.248.0
Setting default IPv4 interface for multicast: add net 224.0/4: gateway sundar
syslog service starting.
Print services started.
volume management starting.
checking : /usr/sbin/luxadm
Starting RMI Registry
checking : /usr/lib/liba5k.so.2
Starting VERITAS VM Storage Administrator Command Server
checking : /usr/lib/libg_fc.so.2
checking : /usr/lib/sparcv9/liba5k.so.2
checking : /usr/lib/sparcv9/libg_fc.so.2
Starting VERITAS VM Storage Administrator Server
The system is ready.
# vxdisk list
DEVICE TYPE DISK GROUP STATUS
c1t1d0s2 sliced root disk rootdg online
c1t2d0s2 sliced praedm01 praedg online
c1t3d0s2 sliced disk05 tempdg online
c1t4d0s2 sliced disk04 tempdg online
c1t6d0s2 sliced disk01 tempdg online
c1t8d0s2 sliced praedm02 praedg online
c1t9d0s2 sliced - - online
# vxprint -htqg rootdg
dg rootdg default default 0 1015128868.1025.sundar
dm root disk c1t1d0s2 sliced 2843 17916252 -
v opt - ENABLED ACTIVE 4194900 ROUND - gen
pl opt-01 opt ENABLED ACTIVE 4194900 CONCAT - RW
sd root disk-05 opt-01 root disk 0 4194900 0 c1t1d0 ENA
v rootvol - ENABLED ACTIVE 4448964 ROUND - root
pl rootvol-01 rootvol ENABLED ACTIVE 4448964 CONCAT - RW
sd root disk-02 rootvol-01 root disk 4194900 4448964 0 c1t1d0 ENA
v swapvol - ENABLED ACTIVE 882588 ROUND - swap
pl swapvol-01 swapvol ENABLED ACTIVE 882588 CONCAT - RW
sd root disk-01 swapvol-01 root disk 8643864 882588 0 c1t1d0 ENA
v usr - ENABLED ACTIVE 4194900 ROUND - gen
pl usr-01 usr ENABLED ACTIVE 4194900 CONCAT - RW
sd root disk-04 usr-01 root disk 9526452 4194900 0 c1t1d0 ENA
v var - ENABLED ACTIVE 4194900 ROUND - gen
pl var-01 var ENABLED ACTIVE 4194900 CONCAT - RW
sd root disk-03 var-01 root disk 13721352 4194900 0 c1t1d0 ENA
Products Applied:
Volume Manager for UNIX/Linux 3.1.1 P02 (Solaris), 3.1.1 P03 (Solaris), 3.1.1 P03 Localized, 3.1.1 P04 (Solaris), 3.1.1(Solaris), 3.2 (Solaris), 3.2 P01(Solaris), 3.2 P02 (Solaris), 3.2 U1(Linux), 3.2 U2 (Linux), 3.2.0.0 (AIX), 3.2s9 (Solaris), 3.5 (Solaris)
Subjects:
Volume Manager for UNIX/Linux
Application: Configuration, How To
Operating System: How To, Installation
Languages:
English (US)
Operating Systems:
Solaris2.6, 7.0 (32-bit), 8.0 (32-bit), 9.0 (32-bit)
THE INFORMATION PROVIDED IN THE SYMANTEC SOFTWARE KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. SYMANTEC SOFTWARE DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SYMANTEC SOFTWARE OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES,EVEN IF SYMANTEC SOFTWARE OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.