[2009-12 update: Outdated by $ORACLE_HOME/bin/rawutl from 10g on] #!/usr/bin/perl -w #rawsize.pl: Find size of raw partitions (raw "files"). This could be difficult #when logical volume manager is used. This script finds the size in #/proc/partitions, where block device major:minor numbers are shown. The trick #is to find which block device number our raw device such as /dev/RAC/RAC1undo #is bound to. Fortunately /usr/bin/raw /dev/RAC/* (or #/usr/bin/stat /dev/RAC/*) #provides this information, like this # # raw -q /dev/RAC/RACdata07 # /dev/raw/raw32: bound to major 58, minor 21 # # cat /proc/partitions | grep '^ 58 21' | awk '{print $3}' # 4403200 #So the block device (whose name is not shown here and we don't really care) #bound to by raw device /dev/RAC/RACdata07 has 4403200 KB in size. #Note that this script has to be run by root unless you have read and write #permission on /dev/rawctl. if (!defined $ARGV[0]) { print "Usage: $0 DirWhereRawFilesAre Example: $0 /dev/RAC (or $0 /dev/raw) Do not type $0 /dev/RAC/* (or $0 /dev/raw/*)\n"; exit 1; } $dir = $ARGV[0]; $pttn = qx(cat /proc/partitions | awk '\$1~/^[0-9]/ {print \$1 ":" \$2, \$3}'); @device1 = split /\n/, $pttn; foreach (@device1) { ($dev, $size) = split; $devsize{$dev} = $size; #print "Device $dev has size $devsize{$dev}.\n"; } $raw = qx( for i in $dir/*; do echo -n "\$i " raw -q \$i | perl -nle '/major (\\d+), minor (\\d+)/; print \$1,":",\$2' done); @device2 = split /\n/, $raw; foreach (@device2) { next if / 0:0$/; #ignore raw devices not bound to any block device ($path, $dev) = split; print "$path: $devsize{$dev} KB\n"; } #On EA's test server where Oracle9i RAC is running # ./rawsize.pl /dev/RAC /dev/RAC/RAC1grp1mem1: 237568 KB /dev/RAC/RAC1grp2mem1: 237568 KB /dev/RAC/RAC1grp3mem1: 237568 KB /dev/RAC/RAC1grp4mem1: 237568 KB /dev/RAC/RAC1grp5mem1: 237568 KB /dev/RAC/RAC1undo: 2101248 KB /dev/RAC/RAC2grp1mem1: 237568 KB /dev/RAC/RAC2grp2mem1: 237568 KB /dev/RAC/RAC2grp3mem1: 237568 KB /dev/RAC/RAC2grp4mem1: 237568 KB /dev/RAC/RAC2grp5mem1: 237568 KB /dev/RAC/RAC2undo: 2101248 KB /dev/RAC/RAC3undo: 2097152 KB /dev/RAC/RAC4undo: 2097152 KB /dev/RAC/RACcontrol01: 204800 KB /dev/RAC/RACcontrol02: 204800 KB /dev/RAC/RACdata01: 4403200 KB /dev/RAC/RACdata02: 4403200 KB /dev/RAC/RACdata03: 4403200 KB /dev/RAC/RACdata04: 4403200 KB /dev/RAC/RACdata05: 4403200 KB /dev/RAC/RACdata06: 4403200 KB /dev/RAC/RACdata07: 4403200 KB /dev/RAC/RACdata08: 4403200 KB /dev/RAC/RACdata09: 4403200 KB /dev/RAC/RACdata18: 4403200 KB /dev/RAC/RACdata19: 4403200 KB /dev/RAC/RACdata20: 4403200 KB /dev/RAC/RACdata21: 4403200 KB /dev/RAC/RACdata22: 4403200 KB /dev/RAC/RACmonitor: 8192 KB /dev/RAC/RACspfile: 8192 KB /dev/RAC/RACsrvcfg: 106496 KB /dev/RAC/RACsystem01: 1048576 KB /dev/RAC/RACtemp01: 2621440 KB /dev/RAC/RACtemp02: 2621440 KB /dev/RAC/RACtemp03: 4403200 KB /dev/RAC/RACtemp04: 4403200 KB #On my home computer where Oracle81701 OPS is running bash# ./rawsize.pl /dev/raw /dev/raw/raw1: 16033 KB /dev/raw/raw10: 16033 KB /dev/raw/raw2: 361431 KB /dev/raw/raw3: 16033 KB /dev/raw/raw4: 16033 KB /dev/raw/raw5: 16033 KB /dev/raw/raw6: 16033 KB /dev/raw/raw7: 16033 KB /dev/raw/raw8: 16033 KB /dev/raw/raw9: 16033 KB The following shows that raw "file", /dev/RAC/RACdata03, which has size 4403200k should leave at least 8k[note] not allocated to Oracle datafile: ***************** Begin Cut ***************** SQL> alter database datafile '/dev/RAC/RACdata03' resize 4403193k; alter database datafile '/dev/RAC/RACdata03' resize 4403193k * ERROR at line 1: ORA-01237: cannot extend datafile 9 ORA-01110: data file 9: '/dev/RAC/RACdata03' ORA-19502: write error on file "/dev/RAC/RACdata03", blockno 550400 (blocksize=8192) ORA-27072: skgfdisp: I/O error Linux Error: 6: No such device or address Additional information: 550399 SQL> alter database datafile '/dev/RAC/RACdata03' resize 4403192k; Database altered. ***************** End Cut ***************** [note] 8k happens to be db_block_size. On Linux, how do we see the actual sizes of the “files” under /dev/RAC, such as /dev/RAC/RAC1undo? At first I thought I could look at /proc/lvm/global. Then I realized only the “files” under /dev/racvg1 are under LVM control, although those file names are quite similar to those under /dev/RAC. Then I looked at /proc/partitions. But they turn out to be the same as what /proc/lvm/global gives (I have to look at the individual “files” under /proc/lvm/VGs/racvg1/LVs, the last line, to match on major:minor number). Then I looked at fdisk –l. But that doesn’t show /dev/RAC either. So what *are* /dev/RAC/* files? DBAs here are told they all are of 2GB in size so when we create Oracle datafiles using those raw “files” we should create datafiles of size 2000M. Being told is one thing. Finding that out by myself is another. [/dev/racvg, not /dev/racvg1, is another mystery to me. But that’s another story] Thanks for help. Yong From Redwood City $ cat /proc/partitions | grep '^ 58' | sort -nk 2,2 58 10 2097152 lvmk 0 0 0 0 0 0 0 0 0 0 0 58 11 2097152 lvml 0 0 0 0 0 0 0 0 0 0 0 58 18 4403200 lvms 0 0 0 0 0 0 0 0 0 0 0 58 19 4403200 lvmt 0 0 0 0 0 0 0 0 0 0 0 58 20 4403200 lvmu 0 0 0 0 0 0 0 0 0 0 0 58 21 4403200 lvmv 0 0 0 0 0 0 0 0 0 0 0 58 22 4403200 lvmw 0 0 0 0 0 0 0 0 0 0 0 58 23 4403200 lvmx 0 0 0 0 0 0 0 0 0 0 0 58 24 4403200 lvmy 0 0 0 0 0 0 0 0 0 0 0 58 25 4403200 lvmz 0 0 0 0 0 0 0 0 0 0 0 58 26 18432000 lvm{ 0 0 0 0 0 0 0 0 0 0 0 58 28 4403200 lvm} 0 0 0 0 0 0 0 0 0 0 0 58 29 4403200 lvm~ 0 0 0 0 0 0 0 0 0 0 0 58 30 4403200 lv 0 0 0 0 0 0 0 0 0 0 0 58 69 8192 lvm¦ 0 0 0 0 0 0 0 0 0 0 0 58 70 106496 lvm§ 0 0 0 0 0 0 0 0 0 0 0 58 71 8192 lvm¨ 0 0 0 0 0 0 0 0 0 0 0 58 72 204800 lvm© 0 0 0 0 0 0 0 0 0 0 0 58 73 204800 lvmª 0 0 0 0 0 0 0 0 0 0 0 58 74 1048576 lvm« 0 0 0 0 0 0 0 0 0 0 0 58 75 2621440 lvm¬ 0 0 0 0 0 0 0 0 0 0 0 58 76 2621440 lvm­ 0 0 0 0 0 0 0 0 0 0 0 58 77 2101248 lvm® 0 0 0 0 0 0 0 0 0 0 0 58 78 2101248 lvm¯ 0 0 0 0 0 0 0 0 0 0 0 58 79 237568 lvm° 0 0 0 0 0 0 0 0 0 0 0 58 80 237568 lvm± 0 0 0 0 0 0 0 0 0 0 0 58 81 237568 lvm² 0 0 0 0 0 0 0 0 0 0 0 58 82 237568 lvm³ 0 0 0 0 0 0 0 0 0 0 0 58 83 237568 lvm´ 0 0 0 0 0 0 0 0 0 0 0 58 84 237568 lvmµ 0 0 0 0 0 0 0 0 0 0 0 58 85 237568 lvm¶ 0 0 0 0 0 0 0 0 0 0 0 58 86 237568 lvm· 0 0 0 0 0 0 0 0 0 0 0 58 87 237568 lvm¸ 0 0 0 0 0 0 0 0 0 0 0 58 88 237568 lvm¹ 0 0 0 0 0 0 0 0 0 0 0 58 89 4194304 lvmº 0 0 0 0 0 0 0 0 0 0 0 58 90 4194304 lvm» 0 0 0 0 0 0 0 0 0 0 0 58 91 1048576 lvm¼ 0 0 0 0 0 0 0 0 0 0 0 58 92 1048576 lvm½ 0 0 0 0 0 0 0 0 0 0 0 58 93 4403200 lvm¾ 0 0 0 0 0 0 0 0 0 0 0 58 94 4403200 lvm¿ 0 0 0 0 0 0 0 0 0 0 0 58 95 4403200 lvmÀ 0 0 0 0 0 0 0 0 0 0 0 58 96 4403200 lvmÁ 0 0 0 0 0 0 0 0 0 0 0 58 98 4403200 lvmà 0 0 0 0 0 0 0 0 0 0 0 58 100 2048000 lvmÅ 0 0 0 0 0 0 0 0 0 0 0 # raw -qa | sort -nk 7,7 /dev/raw/raw27: bound to major 58, minor 10 /dev/raw/raw28: bound to major 58, minor 11 /dev/raw/raw29: bound to major 58, minor 18 /dev/raw/raw30: bound to major 58, minor 19 /dev/raw/raw31: bound to major 58, minor 20 /dev/raw/raw32: bound to major 58, minor 21 /dev/raw/raw33: bound to major 58, minor 22 /dev/raw/raw34: bound to major 58, minor 23 /dev/raw/raw35: bound to major 58, minor 24 /dev/raw/raw13: bound to major 58, minor 25 /dev/raw/raw36: bound to major 58, minor 28 /dev/raw/raw37: bound to major 58, minor 29 /dev/raw/raw38: bound to major 58, minor 30 /dev/raw/raw1: bound to major 58, minor 69 /dev/raw/raw2: bound to major 58, minor 70 /dev/raw/raw3: bound to major 58, minor 71 /dev/raw/raw4: bound to major 58, minor 72 /dev/raw/raw5: bound to major 58, minor 73 /dev/raw/raw6: bound to major 58, minor 74 /dev/raw/raw7: bound to major 58, minor 75 /dev/raw/raw8: bound to major 58, minor 76 /dev/raw/raw15: bound to major 58, minor 77 /dev/raw/raw16: bound to major 58, minor 78 /dev/raw/raw17: bound to major 58, minor 79 /dev/raw/raw18: bound to major 58, minor 80 /dev/raw/raw19: bound to major 58, minor 81 /dev/raw/raw20: bound to major 58, minor 82 /dev/raw/raw21: bound to major 58, minor 83 /dev/raw/raw22: bound to major 58, minor 84 /dev/raw/raw23: bound to major 58, minor 85 /dev/raw/raw24: bound to major 58, minor 86 /dev/raw/raw25: bound to major 58, minor 87 /dev/raw/raw26: bound to major 58, minor 88 /dev/raw/raw9: bound to major 58, minor 93 /dev/raw/raw10: bound to major 58, minor 94 /dev/raw/raw11: bound to major 58, minor 95 /dev/raw/raw12: bound to major 58, minor 96 /dev/raw/raw14: bound to major 58, minor 98 $ cat /proc/lvm/global LVM module version LVM 0.9.1_beta7(ish) (20 June 2001) Total: 1 VG 7 PVs 44 LVs (14 LVs open 52 times) Global: 493424 bytes malloced IOP version: 10 141 days 13:08:51 active VG: racvg1 [7 PV, 44 LV/14 open] PE Size: 4096 KB Usage [KB/PE]: 121856000 /29750 total 119013376 /29056 used 2842624 /694 free PVs: [AA] sdf1 17408000 /4250 17408000 /4250 0 /0 [AA] sdo1 17408000 /4250 17408000 /4250 0 /0 [AA] sdg1 17408000 /4250 17408000 /4250 0 /0 [AA] sdn1 17408000 /4250 17408000 /4250 0 /0 [AA] sdj1 17408000 /4250 17408000 /4250 0 /0 [AA] sdi1 17408000 /4250 17408000 /4250 0 /0 [AA] sdl1 17408000 /4250 14565376 /3556 2842624 /694 LVs: [AWDL ] RACmonitor 8192 /2 close [AWDL ] RACsrvcfg 106496 /26 1x open [AWDL ] RACspfile 8192 /2 close [AWDL ] RACcontrol01 204800 /50 7x open [AWDL ] RACcontrol02 204800 /50 7x open [AWDL ] RACsystem01 1048576 /256 6x open [AWDL ] RACtemp01 2621440 /640 close [AWDL ] RACtemp02 2621440 /640 close [AWDL ] RAC1undo 2101248 /513 4x open [AWDL ] RAC2undo 2101248 /513 4x open [AWDL ] RAC1grp1mem1 237568 /58 close [AWDL ] RAC1grp2mem1 237568 /58 close [AWDL ] RAC1grp3mem1 237568 /58 1x open [AWDL ] RAC1grp4mem1 237568 /58 close [AWDL ] RAC1grp5mem1 237568 /58 close [AWDL ] RAC2grp1mem1 237568 /58 close [AWDL ] RAC2grp2mem1 237568 /58 close [AWDL ] RAC2grp3mem1 237568 /58 close [AWDL ] RAC2grp4mem1 237568 /58 close [AWDL ] RAC2grp5mem1 237568 /58 close [AWDL ] RAC1arch 4194304 /1024 1x open [AWDL ] RAC2arch 4194304 /1024 close [AWDL ] RAC1dump 1048576 /256 1x open [AWDL ] RAC2dump 1048576 /256 close [AWDL ] RACdata01 4403200 /1075 4x open [AWDL ] RACdata02 4403200 /1075 4x open [AWDL ] RACdata03 4403200 /1075 close [AWDL ] RACdata04 4403200 /1075 close [AWDL ] RAC3undo 2097152 /512 4x open [AWDL ] RACdata22 4403200 /1075 4x open [AWDL ] RAC4undo 2097152 /512 4x open [AWDL ] RACcatalog 2048000 /500 close [AWDL ] RACdata05 4403200 /1075 close [AWDL ] lv_bkp 18432000 /4500 close [AWDL ] RACtemp03 4403200 /1075 close [AWDL ] RACtemp04 4403200 /1075 close [AWDL ] RACdata06 4403200 /1075 close [AWDL ] RACdata07 4403200 /1075 close [AWDL ] RACdata08 4403200 /1075 close [AWDL ] RACdata09 4403200 /1075 close [AWDL ] RACdata18 4403200 /1075 close [AWDL ] RACdata19 4403200 /1075 close [AWDL ] RACdata20 4403200 /1075 close [AWDL ] RACdata21 4403200 /1075 close $ cat /proc/lvm/VGs/racvg1/LVs/RAC1undo name: /dev/racvg1/RAC1undo size: 4202496 access: 3 status: 1 number: 8 open: 4 allocation: 0 device: 58:77 # fdisk -l | more Disk /dev/sdq: 255 heads, 63 sectors, 2168 cylinders Units = cylinders of 16065 * 512 bytes Device Boot Start End Blocks Id System /dev/sdq1 1 2168 17414428+ 8e Linux LVM Disk /dev/sdr: 255 heads, 63 sectors, 2168 cylinders Units = cylinders of 16065 * 512 bytes Device Boot Start End Blocks Id System /dev/sdr1 1 2168 17414428+ 8e Linux LVM Disk /dev/sds: 255 heads, 63 sectors, 2168 cylinders Units = cylinders of 16065 * 512 bytes ... Disk /dev/sda: 255 heads, 63 sectors, 2202 cylinders Units = cylinders of 16065 * 512 bytes Device Boot Start End Blocks Id System /dev/sda1 1 10 80324+ 83 Linux /dev/sda2 11 76 530145 83 Linux /dev/sda3 77 337 2096482+ 82 Linux swap /dev/sda4 338 2202 14980612+ 5 Extended /dev/sda5 338 742 3253162 83 Linux /dev/sda6 743 1004 2104514+ 83 Linux /dev/sda7 1005 1070 530144+ 83 Linux /dev/sda8 1071 2202 9092789+ 83 Linux Disk /dev/sdb: 255 heads, 63 sectors, 8908 cylinders Units = cylinders of 16065 * 512 bytes Device Boot Start End Blocks Id System /dev/sdb1 1 8908 71553478+ 5 Extended /dev/sdb5 1 8908 71553447 83 Linux ... $ df -k Filesystem 1k-blocks Used Available Use% Mounted on /dev/sda2 521780 243644 251632 50% / /dev/sda1 77771 30625 43130 42% /boot /dev/sda7 521780 316680 178596 64% /home /dev/sda8 8949916 7811836 683444 92% /opt none 1899372 0 1899372 0% /dev/shm /dev/sda5 3202012 843436 2195920 28% /usr /dev/sda6 2071416 130484 1835708 7% /var none 1899372 0 1899372 0% /memfs /dev/racvg1/RAC1arch 4128448 1943152 1975584 50% /eacom/oraarch1 /dev/racvg1/RAC1dump 1032088 100632 879028 11% /eacom/oradump1 /dev/sdb5 70430556 18438500 48414384 28% /eacom/DBbkp /dev/sdc1 70430588 14823708 52029208 23% /eacom/archlog1 $ cat /proc/devices Character devices: 1 mem 2 pty 3 ttyp 4 ttyS 5 cua 7 vcs 10 misc 29 fb 36 netlink 109 lvm 128 ptm 129 ptm 130 ptm 131 ptm 132 ptm 133 ptm 134 ptm 135 ptm 136 pts 137 pts 138 pts 139 pts 140 pts 141 pts 142 pts 143 pts 162 raw 253 lpfcdfc 254 megadev Block devices: 1 ramdisk 2 fd 3 ide0 7 loop 8 sd 9 md 12 unnamed 14 unnamed 38 unnamed 39 unnamed 58 lvm 65 sd 66 sd 67 sd 68 sd 69 sd 70 sd 71 sd