AIX LVM Howto
Initial LVM howto - bits of practical knowledge
How many free space is available in a particular VG?
$ lsvg rootvg
VOLUME GROUP: rootvg VG IDENTIFIER: 005529fc00004c000000012aee01c41b
VG STATE: active PP SIZE: 64 megabyte(s)
VG PERMISSION: read/write TOTAL PPs: 1094 (70016 megabytes)
MAX LVs: 256 FREE PPs: 330 (21120 megabytes)
LVs: 18 USED PPs: 764 (48896 megabytes)
OPEN LVs: 17 QUORUM: 1 (Disabled)
TOTAL PVs: 2 VG DESCRIPTORS: 3
STALE PVs: 0 STALE PPs: 0
ACTIVE PVs: 2 AUTO ON: yes
MAX PPs per VG: 32512
MAX PPs per PV: 1016 MAX PVs: 32
LTG size (Dynamic): 256 kilobyte(s) AUTO SYNC: no
HOT SPARE: no BB POLICY: relocatable
PV RESTRICTION: none
So you have TOTAL PPs: 1094 (70016 megabytes) = 70GB total and FREE PPs: 330 (21120 megabytes) =20GB free in this volume group, rootvg.
The actual usable amount is determined by mirroring.
$ lsvg -l rootvg
rootvg:
LV NAME TYPE LPs PPs PVs LV STATE MOUNT POINT
hd5 boot 1 2 2 closed/syncd N/A
hd6 paging 32 64 2 open/syncd N/A
hd8 jfs2log 1 2 2 open/syncd N/A
hd4 jfs2 4 8 2 open/syncd /
hd2 jfs2 32 64 2 open/syncd /usr
hd9var jfs2 16 32 2 open/syncd /var
hd3 jfs2 4 8 2 open/syncd /tmp
hd1 jfs2 4 8 2 open/syncd /home
hd10opt jfs2 8 16 2 open/syncd /opt
Taking a look at LP -> PP proportions, you may say that every LV (under every FS) has two copies.
Mirroring is defined per LV, not for the whole VG.
You have:
- 20GB of free space for an unmirrored new LV, or
- 10GB of free space if you want to keep the new LV mirrored, or
- 10GB for extending existing mirrored LVs (= filesystems).
Should you have to increase anything by PPs (physical partitons) - for example, paging space with chps - , refer to 'PP SIZE' in the lsvg output.
Which VG contains my filesystem?
lsvg | lsvg -il
should give a listing of every LV/FS known to AIX at the moment.
If you go from the filesystem toward the VG, these are the required steps:
df /myfs or lsfs /myfs -> get the LV name
lslv mylv (without /dev/) -> get the VG name
See also: lsvgfs
What size are my disks?
$ lsvg -p rootvg
rootvg:
PV_NAME PV STATE TOTAL PPs FREE PPs FREE DISTRIBUTION
hdisk0 active 547 165 00..00..00..55..110
hdisk1 active 547 165 00..00..00..55..110
You need to know the PP size defined for the VG. Here, 547 PPs of 64MB make up the 36GB PVs (disks).
The PP size of the rootvg is defined automatically during installation.
The (deprecated) bootinfo command can be used for any disk, including those not belonging to any VG:
bootinfo -s hdisk0
Parameters
Sorry about the look, I will try to improve it later.
...
Is a certain filesystem in frozen state?
Freezing a JFS2 filesystem works this way:
chfs -a freeze=120 /freeze
The fsdb utility shows the FM_CLEANQUIESCED flag with the 'su(perblock)' command:
> su
[1] s_magic: 'J2FS' [18] s_fscklog: 1
[2] s_version: 2 [19] s_fsckloglen: 50
[3] s_size: 0x000000000007fe58 [20] s_bsize: 4096
[4] s_logdev: 0x8000000a00000003 [21] s_logserial: 0x0000000d
[5] s_l2bsize: 12 [22] s_logpxd.len: 0
[6] s_l2bfactor: 3 [23] s_logpxd.addr1: 0x00
[7] s_pbsize: 512 [24] s_logpxd.addr2: 0x00000000
[8] s_l2pbsize: 9 s_logpxd.address: 0
[9] s_rsv: Not Displayed [25] s_fsckpxd.len: 53
[10] s_agsize: 0x00002000 [26] s_fsckpxd.addr1: 0x00
[11] s_flag: 0x00000100 [27] s_fsckpxd.addr2: 0x0000ffcb
s_fsckpxd.address: 65483
[28] s_ait.len: 4
J2_GROUPCOMMIT [29] s_ait.addr1: 0x00
[30] s_ait.addr2: 0x0000000b
s_ait.address: 11
[12] s_state: 0x00001001 [31] s_fpack: 'freeze'
FM_MOUNT FM_CLEANQUIESCED [32] s_fname: ''
[13] s_time.tj_sec: 0x0000000050a674c0 [33] s_time.tj_nsec: 0x00000000
[14] s_ait2.len: 4 [34] s_xfsckpxd.len: 0
[15] s_ait2.addr1: 0x00 [35] s_xfsckpxd.addr1: 0x00
[16] s_ait2.addr2: 0x0000001d [36] s_xfsckpxd.addr2: 0x00000000
s_ait2.address: 29 s_xfsckpxd.address: 0
[17] s_xsize: 0x0000000000000000 [37] s_xlogpxd.len: 0
[40] feature_compat: 0x0000000000000001 [38] s_xlogpxd.addr1: 0x00
[41] feature_rdonly: 0x0000000000000000 [39] s_xlogpxd.addr2: 0x00000000
[42] feature_incompat: 0x0000000000000000 s_xlogpxd.address: 0
[43-49] <...snapshot info...> [50] s_maxext: 0x00000000
So, to detect this, here is an example:
# echo "su\n" | fsdb /freeze 2>&1 | grep -q FM_CLEANQUIESCED && echo "FS is frozen"
There is a new errpt enrty logged each time a filesystem freeze period expires:
LABEL: J2_FREEZE_TIMEOUT
IDENTIFIER: 86CA9D0C
Class: O
Type: INFO
Resource Name: SYSJ2
Description
FILE SYSTEM FREEZE TIMEOUT EXPIRED. FILE SYSTEM IS THAWED.
Probable Causes
FREEZE TIMEOUT REQUESTED TOO SHORT
Detail Data
JFS2 MAJOR/MINOR DEVICE NUMBER
000A 000B
FILE SYSTEM DEVICE AND MOUNT POINT
/dev/freezelv, /freeze
Manage mirror pools
Mirror pools provide an efficient method of separating LUNs from different sides of a redundant storage.
Things like running cfgmgr, identifying disks and sizes etc are not mentioned here.
Make sure you adjust disk parameters before assigning them to VGs because most of them requires re-initialization of disks (rmdev/mkdev).
Make sure you record LUN IDs for the storage admins before removing them.
I assume that new disk devices are available.
Example: "myvg" with 2x3 LUNs in VG mirror, migrated to 2x1 LUNs. Pool names speak for themselves.
Pool layout
# lsvg -P myvg
Physical Volume Mirror Pool
hdisk1 oldpool1
hdisk2 oldpool2
hdisk3 oldpool1
hdisk4 oldpool2
hdisk5 oldpool1
hdisk6 oldpool2
You can have a maximum of 3 pools at once. Add newpool1 and build 3rd mirror copy.
# extendvg -p newpool1 myvg hdisk101
# mirrorvg -S -c 3 -p copy1=oldpool1 -p copy2=oldpool2 -p copy3=newpool1 myvg hdisk101
Check if mirroring has finished (STALE PPs should be 0)
# lsvg myvg | grep STALE
Remove oldpool1 disks
# unmirrorvg -c 2 myvg hdisk1 hdisk3 hdisk5
# reducevg myvg hdisk1 hdisk3 hdisk5
# for d in hdisk1 hdisk3 hdisk5; do rmdev -dl $d; done
Repeat for newpool2 and oldpool2
# extendvg -p newpool2 myvg hdisk201
# mirrorvg -S -c 3 -p copy1=oldpool2 -p copy2=newpool1 -p copy3=newpool2 myvg hdisk201
# lsvg myvg | grep STALE
# unmirrorvg -c 2 myvg hdisk2 hdisk4 hdisk6
# reducevg myvg hdisk2 hdisk4 hdisk6
# for d in hdisk2 hdisk4 hdisk6; do rmdev -dl $d; done
Resulting layout
# lsvg -P myvg
Physical Volume Mirror Pool
hdisk101 newpool1
hdisk201 newpool2
Low level command flags
lqueryvg -g -c VG's number of disks
lqueryvg -g -n VG's number of LVs
lqueryvg -g -P VG's PVIDs
lqueryvg -g -s/S? PP size
getlvodm –C (lspv)
getlvodm -e LV name
getlvodm -m LV mount point
getlvodm -y LV type
getlvodm -c LV copies
getlvodm -N stripped or not
getlvodm -v VGID
getlvodm -g name of (one) PV
getlvodm -L all LVs/LVIDs of a VG
getlvcb -AT all information about the LV
getlvcb -a intrA-physical volume allocation policy
getlvcb -c copies
getlvcb -f file system name
getlvcb –L label
getlvcb -r inteR-physical volume allocation policy
getlvcb –P stripe expn
getlvcb –S striping width
getlvcb -s strictness
getlvcb –t type of filesystem
getlvcb –u upper limit
---
...