tag:blogger.com,1999:blog-31031254923219321292024-03-05T11:08:23.036-05:00Super UserGaryhttp://www.blogger.com/profile/03674881180431139945noreply@blogger.comBlogger43125tag:blogger.com,1999:blog-3103125492321932129.post-75834141060820238212008-08-27T23:00:00.001-04:002008-08-27T23:01:31.091-04:00blog is movedto <a href="http://super-user.org/blog">here</a>Garyhttp://www.blogger.com/profile/03674881180431139945noreply@blogger.com29tag:blogger.com,1999:blog-3103125492321932129.post-46230156823347238492008-07-09T09:59:00.002-04:002008-07-09T10:15:08.210-04:00Converting a flexible volume to a traditional volume.A simple way to convert a flexible volume to a traditional volume is to use ndmp, within the same filer. <br /><br />Firstly enable ndmp and turn it on.<br /><pre><br />filer>options ndmpd.enable on<br />filer>ndmpd on<br /></pre><br />Next create the volume that you want to migrate the data to. In this case, I create a traditional volume with 5 disks, and use raid4 protection rather than raid-dp.<br /><pre><br />filer>vol create vol0_trad -t raid4 5<br /></pre><br />The output of the command should look similar to this :-<br /><pre><br />Tue Jul 8 20:33:25 GMT [raid.vol.disk.add.done:notice]: Addition of Disk /vol0_trad/plex0/rg0/0d.4 Shelf 0 Bay 4 [SEAGATE ST3500630NSAH AQMZ] S/N [9QG7A9J2] t<br />o volume vol0_trad has completed successfully<br />Tue Jul 8 20:33:25 GMT [raid.vol.disk.add.done:notice]: Addition of Disk /vol0_trad/plex0/rg0/0d.0 Shelf 0 Bay 3 [SEAGATE ST3500630NSAH AQMZ] S/N [9QG7KTSY] t<br />o volume vol0_trad has completed successfully<br />Tue Jul 8 20:33:25 GMT [raid.vol.disk.add.done:notice]: Addition of Disk /vol0_trad/plex0/rg0/0d.3 Shelf 0 Bay 2 [SEAGATE ST3500630NSAH AQMZ] S/N [9QG7LHPR] t<br />o volume vol0_trad has completed successfully<br />Tue Jul 8 20:33:25 GMT [raid.vol.disk.add.done:notice]: Addition of Disk /vol0_trad/plex0/rg0/0c.6 Shelf 0 Bay 7 [SEAGATE ST3500630NSAH AQMZ] S/N [9QG7C91R] t<br />o volume vol0_trad has completed successfully<br />Tue Jul 8 20:33:25 GMT [raid.vol.disk.add.done:notice]: Addition of Disk /vol0_trad/plex0/rg0/0d.1 Shelf 0 Bay 1 [SEAGATE ST3500630NSAH AQMZ] S/N [9QG7LHVF] t<br />o volume vol0_trad has completed successfully<br />Creation of a volume with 5 disks has completed.<br />perfdevsrv015> Tue Jul 8 20:33:26 GMT [wafl.vol.add:notice]: Volume vol0_trad has been added to the system.<br /></pre><br />Next I use ndmpcopy to copy the files to the new volume. I use the -f switch since I am copying the root volume.<br /><pre>ndmpcopy -f /vol/vol0 /vol/vol0_trad</pre><br />The output looks as below<br /><pre><br />Ndmpcopy: Starting copy [ 0 ] ...<br />Ndmpcopy: perfdevsrv015: Notify: Connection established<br />Ndmpcopy: perfdevsrv015: Notify: Connection established<br />Ndmpcopy: perfdevsrv015: Connect: Authentication successful<br />Ndmpcopy: perfdevsrv015: Connect: Authentication successful<br />Ndmpcopy: perfdevsrv015: Log: DUMP: creating "/vol/vol0/../snapshot_for_backup.0" snapshot.<br />Ndmpcopy: perfdevsrv015: Log: DUMP: Using Full Volume Dump<br />Ndmpcopy: perfdevsrv015: Log: DUMP: Date of this level 0 dump: Tue Jul 8 20:35:51 2008.<br />Ndmpcopy: perfdevsrv015: Log: DUMP: Date of last level 0 dump: the epoch.<br />Ndmpcopy: perfdevsrv015: Log: DUMP: Dumping /vol/vol0 to NDMP connection<br />Ndmpcopy: perfdevsrv015: Log: DUMP: mapping (Pass I)[regular files]<br />Ndmpcopy: perfdevsrv015: Log: DUMP: mapping (Pass II)[directories]<br />Tue Jul 8 20:36:21 GMT [asup.post.badUrl:warning]: Autosupport was not posted because there was an invalid or missing url specified (REBOOT)<br />Ndmpcopy: perfdevsrv015: Log: DUMP: estimated 235187 KB.<br />Ndmpcopy: perfdevsrv015: Log: DUMP: dumping (Pass III) [directories]<br />Ndmpcopy: perfdevsrv015: Log: RESTORE: Tue Jul 8 20:36:40 2008: Begin level 0 restore<br />Ndmpcopy: perfdevsrv015: Log: RESTORE: Tue Jul 8 20:36:40 2008: Reading directories from the backup<br />Ndmpcopy: perfdevsrv015: Log: DUMP: dumping (Pass IV) [regular files]<br />Ndmpcopy: perfdevsrv015: Log: RESTORE: Tue Jul 8 20:36:49 2008: Creating files and directories.<br />Ndmpcopy: perfdevsrv015: Log: RESTORE: Tue Jul 8 20:36:54 2008: Writing data to files.<br />Ndmpcopy: perfdevsrv015: Log: RESTORE: Tue Jul 8 20:37:30 2008: Restoring NT ACLs.<br />Ndmpcopy: perfdevsrv015: Log: DUMP: dumping (Pass V) [ACLs]<br />Ndmpcopy: perfdevsrv015: Log: DUMP: 238893 KB<br />Ndmpcopy: perfdevsrv015: Log: RESTORE: RESTORE IS DONE<br />Ndmpcopy: perfdevsrv015: Log: DUMP: DUMP IS DONE<br />Ndmpcopy: perfdevsrv015: Log: RESTORE: The destination path is /vol/vol0_trad/<br />Ndmpcopy: perfdevsrv015: Notify: restore successful<br />Ndmpcopy: perfdevsrv015: Log: DUMP: Deleting "/vol/vol0/../snapshot_for_backup.0" snapshot.<br />Ndmpcopy: perfdevsrv015: Notify: dump successful<br />Ndmpcopy: Transfer successful [ 1 minutes 44 seconds ]<br />Ndmpcopy: Done <br /></pre><br />Now since I want to boot from this volume I set the boot option<br /><pre>vol options vol0_trad root</pre><br />ONTAP tells me that this volume will become the root volume on next boot;<br /><pre>Volume 'vol0_trad' will become root at the next boot.</pre><br />I can now reboot. I only need to do this step because I am messing with the boot/root volume<br /><pre><br />filer>reboot<br /></pre><br />After reboot I can rename the volumes<br /><pre><br />filer>vol rename vol0 vol0_flex<br /></pre><br />And now I can safely remove the volume and the aggregate so that I can use the disks in my new traditional volume<br /><pre><br />filer> vol offline vol0_flex<br />Tue Jul 8 20:46:01 GMT [wafl.vvol.offline:info]: Volume 'vol0_flex' has been set temporarily offline<br />Volume 'vol0_flex' is now offline.<br /><br />filer> vol destroy vol0_flex<br />Are you sure you want to destroy this volume? y<br />Volume 'vol0_flex' destroyed.<br /><br />filer> aggr offline aggr0<br />Aggregate 'aggr0' is now offline.<br /><br /><br />filer> aggr destroy aggr0<br />Are you sure you want to destroy this aggregate? y<br />Tue Jul 8 20:46:36 GMT [raid.config.vol.destroyed:info]: Aggregate 'aggr0' destroyed.<br />Aggregate 'aggr0' destroyed.<br /></pre><br /><br />Now that I have destroyed the volume and aggegate, I am free to reuse those disks. ONTAP gives a warning that I will have no spare disks, and that this is risky in case of a failure. <br /><pre><br />filer> vol add vol0 2<br /><br />WARNING! Continuing with vol add will result in having<br />no spare disk available for one or more RAID groups.<br />Are you sure you want to continue with vol add? y<br />Addition of 2 disks to the volume has been initiated. The disks need<br />to be zeroed before addition to the volume. The process has been initiated<br />and you will be notified via the system log as disks are added.<br /></pre><br /><br />Once the disks are zeroed all the disks now belong to the traditional volume.Garyhttp://www.blogger.com/profile/03674881180431139945noreply@blogger.com1tag:blogger.com,1999:blog-3103125492321932129.post-37988722099218319982008-06-27T17:33:00.002-04:002008-06-27T17:39:34.752-04:00Munge columnar into one datafile (for processing in a spreadsheet, gnuplot or whatever)Often we'll use awk or cut to spit out a single column of data from a bunch of different files, or maybe from the same file... anyhow once we have these files with one column of data, sometimes we'll want to splice those files together so we can look at each line (typically a stat of some sort) next to each other. Also it's very convenient if we want to import the data into a spreadsheet.<br /><br />Anyhow, let's say I have three files iscsi_080626.txt greads.out.txt idle.out.txt. I can put them together into one file using the 'pr' command like so.<br /><br />iscsi file<br /><pre>bash-3.00$ head iscsi_080626.txt <br />32782319.86<br />32793022.93<br />32734064.23<br />32719233.74<br />32652552.75<br />32815570.70</pre><br /><br />gread file<br />bash-3.00$ head greads.out.txt <pre><br />0.00<br />0.00<br />0.00<br />0.00<br />0.00<br />0.00<br />0.00<br />0.00<br />0.00<br />0.00</pre><br /><br />idle file<br /><pre>bash-3.00$ head idle.out.txt <br />248.722142<br />17.662915<br />17.195024<br />16.208969<br />15.856432<br />17.064519<br />16.874948<br />17.122956<br />17.191305<br />16.920703</pre><br /><br /><br /><br /><br /><pre>bash-3.00$ pr -m -t iscsi_080626.txt greads.out.txt idle.out.txt > iscsi_greads_idle.txt</pre><br /><br />And the output file looke like this<br /><pre>bash-3.00$ head iscsi_greads_idle.txt <br />32782319.86 0.00 248.722142<br />32793022.93 0.00 17.662915<br />32734064.23 0.00 17.195024<br />32719233.74 0.00 16.208969<br />32652552.75 0.00 15.856432<br />32815570.70 0.00 17.064519<br />32801494.63 0.00 16.874948<br />32696942.10 0.00 17.122956<br />32715608.64 0.00 17.191305<br />32835538.38 0.00 16.920703<br /></pre>Garyhttp://www.blogger.com/profile/03674881180431139945noreply@blogger.com0tag:blogger.com,1999:blog-3103125492321932129.post-15502732413265510022008-06-27T15:00:00.005-04:002008-06-29T19:37:18.395-04:00Change disks used by an aggregateRecently we needed to transfer an aggregate that was hosted on an external shelf to disks housed internally in our test FAS2020 and the same trick can be used to move an aggregate from one shelf to another.<br /><br />The trick uses the disk-replace command. It works serially, and so it is a little time consuming, BUT it retains exactly the same layout on disk, since it's a bit-for-bit copy.<br /><br />In short the command to use is 'disk replace start <old diskname> < new diskname> e.g. <pre> disk replace start 0b.19 0c.00.0<br /></pre><br />So here's what my disk layout looks like - I am using traditional volumes<br /><pre>Volume vol1 (online, raid_dp) (block checksums)<br /> Plex /vol1/plex0 (online, normal, active)<br /> RAID group /vol1/plex0/rg0 (normal)<br /><br /> RAID Disk Device HA SHELF BAY CHAN Pool Type RPM Used (MB/blks) Phys (MB/blks)<br /> --------- ------ ------------- ---- ---- ---- ----- -------------- --------------<br /> dparity 0c.00.6 0c 0 6 SA:1 - SATA 7200 211377/432901760 211977/434130816<br /> parity 0c.00.1 0c 0 1 SA:1 - SATA 7200 211377/432901760 211977/434130816<br /> data 0b.19 0b 1 3 FC:B - ATA 7200 211377/432901760 211921/434014304<br /> data 0c.00.3 0c 0 3 SA:1 - SATA 7200 211377/432901760 211977/434130816<br /> data 0c.00.11 0c 0 11 SA:1 - SATA 7200 211377/432901760 211977/434130816<br /> data 0c.00.10 0c 0 10 SA:1 - SATA 7200 211377/432901760 211977/434130816<br /> data 0c.00.9 0c 0 9 SA:1 - SATA 7200 211377/432901760 211977/434130816<br /> data 0c.00.8 0c 0 8 SA:1 - SATA 7200 211377/432901760 211977/434130816<br /> data 0c.00.7 0c 0 7 SA:1 - SATA 7200 211377/432901760 211977/434130816<br /> data 0c.00.4 0c 0 4 SA:1 - SATA 7200 211377/432901760 211977/434130816<br /> data 0b.29 0b 1 13 FC:B - ATA 7200 211377/432901760 211921/434014304<br /> data 0c.00.5 0c 0 5 SA:1 - SATA 7200 211377/432901760 211977/434130816<br /><br /><br />Spare disks<br /><br />RAID Disk Device HA SHELF BAY CHAN Pool Type RPM Used (MB/blks) Phys (MB/blks)<br />--------- ------ ------------- ---- ---- ---- ----- -------------- --------------<br />Spare disks for block or zoned checksum traditional volumes or aggregates<br />spare 0a.16 0a 1 0 FC:A - ATA 7200 211377/432901760 211921/434014304 (not zeroed)<br />spare 0a.20 0a 1 4 FC:A - ATA 7200 211377/432901760 211921/434014304<br />spare 0a.22 0a 1 6 FC:A - ATA 7200 211377/432901760 211921/434014304<br />spare 0a.24 0a 1 8 FC:A - ATA 7200 211377/432901760 211921/434014304<br />spare 0a.26 0a 1 10 FC:A - ATA 7200 211377/432901760 211921/434014304<br />spare 0b.17 0b 1 1 FC:B - ATA 7200 211377/432901760 211921/434014304 (not zeroed)<br />spare 0b.25 0b 1 9 FC:B - ATA 7200 211377/432901760 211921/434014304<br />spare 0b.27 0b 1 11 FC:B - ATA 7200 211377/432901760 211921/434014304<br />spare 0c.00.0 0c 0 0 SA:1 - SATA 7200 211377/432901760 211977/434130816 (not zeroed)<br /></pre><br />All the disks marked with a 'CHAN' type of FC:A or FC:B are actually SATA drives on the other side of a FC->SATA bridge, and are basically SATA disks in an external shelf. The disks marked SA:1 are SATA drive internal to the FAS2020. In the output above I am part-way through migrating the disks. Some of the disks in my volume/aggregate are internal and some are external. On of the disks that is still on the external shelf is disk 0b.19. Using the command below I will transfer the data on that individual disk to an internal SATA disk (0c.00.0). The command I use is.<br /><pre> disk replace start 0b.19 0c.00.0</pre><br />Then I receive a warning messge<br /><pre>*** You are about to copy and replace the following file system disk ***<br /> Disk /vol1/plex0/rg0/0b.19<br /><br /> RAID Disk Device HA SHELF BAY CHAN Pool Type RPM Used (MB/blks) Phys (MB/blks)<br /> --------- ------ ------------- ---- ---- ---- ----- -------------- --------------<br /> data 0b.19 0b 1 3 FC:B - ATA 7200 211377/432901760 211921/434014304<br />***<br />Really replace disk 0b.19 with 0c.00.0? y<br />disk replace: Disk 0b.19 was marked for replacing.</pre><br />The output of sysconfig -r shows something like this<br /><pre>Volume vol1 (online, raid_dp) (block checksums)<br /> Plex /vol1/plex0 (online, normal, active)<br /> RAID group /vol1/plex0/rg0 (normal)<br /><br /> RAID Disk Device HA SHELF BAY CHAN Pool Type RPM Used (MB/blks) Phys (MB/blks)<br /> --------- ------ ------------- ---- ---- ---- ----- -------------- --------------<br /> dparity 0c.00.6 0c 0 6 SA:1 - SATA 7200 211377/432901760 211977/434130816<br /> parity 0c.00.1 0c 0 1 SA:1 - SATA 7200 211377/432901760 211977/434130816<br /> data 0b.19 0b 1 3 FC:B - ATA 7200 211377/432901760 211921/434014304 (replacing)<br /> data 0c.00.3 0c 0 3 SA:1 - SATA 7200 211377/432901760 211977/434130816<br /> data 0c.00.11 0c 0 11 SA:1 - SATA 7200 211377/432901760 211977/434130816<br /> data 0c.00.10 0c 0 10 SA:1 - SATA 7200 211377/432901760 211977/434130816<br /> data 0c.00.9 0c 0 9 SA:1 - SATA 7200 211377/432901760 211977/434130816<br /> data 0c.00.8 0c 0 8 SA:1 - SATA 7200 211377/432901760 211977/434130816<br /> data 0c.00.7 0c 0 7 SA:1 - SATA 7200 211377/432901760 211977/434130816<br /> data 0c.00.4 0c 0 4 SA:1 - SATA 7200 211377/432901760 211977/434130816<br /> data 0b.29 0b 1 13 FC:B - ATA 7200 211377/432901760 211921/434014304<br /> data 0c.00.5 0c 0 5 SA:1 - SATA 7200 211377/432901760 211977/434130816<br /></pre><br />And then once the replacement gets under way.. I see my copy under way.<br /><pre>Volume vol1 (online, raid_dp) (block checksums)<br /> Plex /vol1/plex0 (online, normal, active)<br /> RAID group /vol1/plex0/rg0 (normal)<br /><br /> RAID Disk Device HA SHELF BAY CHAN Pool Type RPM Used (MB/blks) Phys (MB/blks)<br /> --------- ------ ------------- ---- ---- ---- ----- -------------- --------------<br /> dparity 0c.00.6 0c 0 6 SA:1 - SATA 7200 211377/432901760 211977/434130816<br /> parity 0c.00.1 0c 0 1 SA:1 - SATA 7200 211377/432901760 211977/434130816<br /> data 0b.19 0b 1 3 FC:B - ATA 7200 211377/432901760 211921/434014304 (replacing, copy in progress)<br /> -> copy 0c.00.0 0c 0 0 SA:1 - SATA 7200 211377/432901760 211977/434130816 (copy 1% completed)<br /> data 0c.00.3 0c 0 3 SA:1 - SATA 7200 211377/432901760 211977/434130816<br /> data 0c.00.11 0c 0 11 SA:1 - SATA 7200 211377/432901760 211977/434130816<br /> data 0c.00.10 0c 0 10 SA:1 - SATA 7200 211377/432901760 211977/434130816<br /> data 0c.00.9 0c 0 9 SA:1 - SATA 7200 211377/432901760 211977/434130816<br /> data 0c.00.8 0c 0 8 SA:1 - SATA 7200 211377/432901760 211977/434130816<br /> data 0c.00.7 0c 0 7 SA:1 - SATA 7200 211377/432901760 211977/434130816<br /> data 0c.00.4 0c 0 4 SA:1 - SATA 7200 211377/432901760 211977/434130816<br /> data 0b.29 0b 1 13 FC:B - ATA 7200 211377/432901760 211921/434014304<br /> data 0c.00.5 0c 0 5 SA:1 - SATA 7200 211377/432901760 211977/434130816<br /></pre><br />And finally when the copy is done, 0c.00.0 is part of the aggregate/volume and 0b.19 is spare.<br /><pre>Volume vol1 (online, raid_dp) (block checksums)<br /> Plex /vol1/plex0 (online, normal, active)<br /> RAID group /vol1/plex0/rg0 (normal)<br /><br /> RAID Disk Device HA SHELF BAY CHAN Pool Type RPM Used (MB/blks) Phys (MB/blks)<br /> --------- ------ ------------- ---- ---- ---- ----- -------------- --------------<br /> dparity 0c.00.6 0c 0 6 SA:1 - SATA 7200 211377/432901760 211977/434130816<br /> parity 0c.00.1 0c 0 1 SA:1 - SATA 7200 211377/432901760 211977/434130816<br /> data 0c.00.0 0c 0 0 SA:1 - SATA 7200 211377/432901760 211977/434130816<br /> data 0c.00.3 0c 0 3 SA:1 - SATA 7200 211377/432901760 211977/434130816<br /> data 0c.00.11 0c 0 11 SA:1 - SATA 7200 211377/432901760 211977/434130816<br /> data 0c.00.10 0c 0 10 SA:1 - SATA 7200 211377/432901760 211977/434130816<br /> data 0c.00.9 0c 0 9 SA:1 - SATA 7200 211377/432901760 211977/434130816<br /> data 0c.00.8 0c 0 8 SA:1 - SATA 7200 211377/432901760 211977/434130816<br /> data 0c.00.7 0c 0 7 SA:1 - SATA 7200 211377/432901760 211977/434130816<br /> data 0c.00.4 0c 0 4 SA:1 - SATA 7200 211377/432901760 211977/434130816<br /> data 0c.00.2 0c 0 2 SA:1 - SATA 7200 211377/432901760 211977/434130816<br /> data 0c.00.5 0c 0 5 SA:1 - SATA 7200 211377/432901760 211977/434130816<br /><br /><br />Spare disks<br /><br />RAID Disk Device HA SHELF BAY CHAN Pool Type RPM Used (MB/blks) Phys (MB/blks)<br />--------- ------ ------------- ---- ---- ---- ----- -------------- --------------<br />Spare disks for block or zoned checksum traditional volumes or aggregates<br />spare 0a.16 0a 1 0 FC:A - ATA 7200 211377/432901760 211921/434014304 (not zeroed)<br />spare 0a.20 0a 1 4 FC:A - ATA 7200 211377/432901760 211921/434014304<br />spare 0a.22 0a 1 6 FC:A - ATA 7200 211377/432901760 211921/434014304<br />spare 0a.24 0a 1 8 FC:A - ATA 7200 211377/432901760 211921/434014304<br />spare 0a.26 0a 1 10 FC:A - ATA 7200 211377/432901760 211921/434014304<br />spare 0b.17 0b 1 1 FC:B - ATA 7200 211377/432901760 211921/434014304 (not zeroed)<br />spare 0b.19 0b 1 3 FC:B - ATA 7200 211377/432901760 211921/434014304 (not zeroed)<br />spare 0b.25 0b 1 9 FC:B - ATA 7200 211377/432901760 211921/434014304<br />spare 0b.27 0b 1 11 FC:B - ATA 7200 211377/432901760 211921/434014304<br />spare 0b.29 0b 1 13 FC:B - ATA 7200 211377/432901760 211921/434014304 (not zeroed)<br /></pre>Garyhttp://www.blogger.com/profile/03674881180431139945noreply@blogger.com0tag:blogger.com,1999:blog-3103125492321932129.post-63695783564257472532008-05-22T14:51:00.004-04:002008-05-22T14:58:39.405-04:00Testing variables in bashSo, one of our developers took it upon himself to re-write one of my crappy scripts, and used some odd looking shell 'test' invocations that I'd never seen before.<br /><pre>[ "$FILERTYPE" != "3040" -a "$FILERTYPE" != "3070" "$FILERTYPE" -a != "3070-br" ] && usage</pre><br />So here we have a logical AND comparison, which calls the function 'usage' if the variable <strong>$FILERTYPE</strong> does not match any of the valid types. It is the <strong>-a</strong> which provides the 'AND' capability, alternatively <strong>-o</strong> gives 'OR' semantics.<br /><br><br />I found a nice page from <a href="http://www.ibm.com/developerworks/library/l-bash-test.html">IBM</a> which describes this format and more. IIRC these tests are available in bash but not ksh.Garyhttp://www.blogger.com/profile/03674881180431139945noreply@blogger.com1tag:blogger.com,1999:blog-3103125492321932129.post-80189557237425163312008-05-20T08:16:00.009-04:002008-05-20T09:13:55.748-04:00Filer iSCSI trace<h4>Running a network trace from a filer</h4><br />Data ONTAP has a built in packet trace capability, which can be run straight from the command line. The format of the capture is the standard BPF and so can be imported into pretty much any tool for viewing and analysis. By default the packet trace is stored in memory, but it can be easily switched to write out to a local volume on the filer in order to gather larger traces.<br /><br /><strong>Start a trace on interface eOb and write the file out to '/' with a miximum trace size of 5 MB</strong><br /><pre>rtpperfsrv053*> pktt start e0b -d / -s 5m</pre><br /><br /><h4>Measuring iSCSI traffic with tethereal</h4><br />tethereal is a command line interface to Ethereal, I am not sure if it comes bundled with Wireshark, but it is available on some linux distros. I find the syntax and functionality nicer than tcpdump. There's lots of data on the net about using tethereal with NFS but not so much with iSCSI. Below are a few commands and filters I used to analyse some traces of iSCSI traffic.<br /><br /><strong>overview</strong><br /><ul><br /><li> In the example below the captured packet data rolled up into the iscsi protocol, and so we see the SCSI writes from the clients (192.168.10.4 & 192.168.10.3) to the filer (192.168.10.5). The LBA: value is the offset into the LUN where the read/write will take place. I am using the '-r' switch to read a file creates by pktt. The filename is interfacename_datetimestamp.trc<br /></li><br /></ul><br /><pre>$tethereal -r e0b_20080519_102523.trc iscsi</pre><br /><br /><pre>7 0.000450 192.168.10.5 -> 192.168.10.3 iSCSI SCSI: Response LUN: 0xffff (CDB:0xffff) (Good)<br />8 0.000545 192.168.10.5 -> 192.168.10.4 iSCSI SCSI: Response LUN: 0xffff (CDB:0xffff) (Good)<br />68 0.001521 192.168.10.3 -> 192.168.10.5 iSCSI SCSI: Write(10) LUN: 0x07 (LBA: 0x00228718, Len: 112)SCSI: Data Out LUN: 0x07 (Write(10) Request Data)<br />69 0.002746 192.168.10.5 -> 192.168.10.3 iSCSI SCSI: Response LUN: 0x07 (Write(10)) (Good)<br />129 0.003225 192.168.10.3 -> 192.168.10.5 iSCSI SCSI: Write(10) LUN: 0x1e (LBA: 0x00228b00, Len: 112)SCSI: Data Out LUN: 0x1e (Write(10) Request Data)<br />180 0.004140 192.168.10.4 -> 192.168.10.5 iSCSI SCSI: Write(10) LUN: 0x1a (LBA: 0x03dd12e8, Len: 96)SCSI: Data Out LUN: 0x1a (Write(10) Request Data)<br />236 0.004871 192.168.10.4 -> 192.168.10.5 iSCSI SCSI: Write(10) LUN: 0x03 (LBA: 0x03de1060, Len: 104)SCSI: Data Out LUN: 0x03 (Write(10) Request Data)<br />315 0.005210 192.168.10.4 -> 192.168.10.5 iSCSI SCSI: Write(10) LUN: 0x1c (LBA: 0x03de1b00, Len: 104)SCSI: Data Out LUN: 0x1c (Write(10) Request Data)<br />331 0.005320 192.168.10.5 -> 192.168.10.3 iSCSI SCSI: Response LUN: 0x1e (Write(10)) (Good)<br /></pre><br /><br /><h4>Gathering statistics</h4><br />Although there are some really nice commands for viewing RPC (e.g. NFS) calls including the round trip time (RTT) of each NFS IO, I could not find anything similar for iSCSI. <br /><ul><br /><li>tethereal does alow the display of per interval statistics, l, in the example below I tethereal displays stats every 1/2 second. It is possible specify any time value down to millisecond. In this example we are reading a pktt created file using '-r'. The output shows that the traffic is somewhat 'bursty' in nature.<br /></li><br /><li>I use the switch <strong>-tad</strong> to give me time as an absolute delta from the first packet. <strong>-r</strong> to read data from a file (rather than 'live' from a NIC). <strong>-q</strong> to print out just the summary result table. <strong>-z io,stat,0.5</strong> tells tethereal to generate statistics on the I/O every 0.5 seconds.<br /></li><br /></ul><br /><pre>$tethereal -tad -r e0b_20080519_153919.trc -qz io,stat,0.5</pre><br /><br /><pre>IO Statistics<br />Interval: 0.500 secs<br />Column #0:<br /> | Column #0 <br />Time |frames| bytes<br />000.000-000.500 15249 15114470<br />000.500-001.000 7828 7686548<br />001.000-001.500 9094 8857572<br />001.500-002.000 9774 9650058<br />002.000-002.500 6218 6062802<br />002.500-003.000 15552 15328528<br />003.000-003.500 4803 4643892<br />003.500-004.000 6354 6203928<br />004.000-004.500 10224 10086896<br />004.500-005.000 5312 5169636<br />005.000-005.500 13555 13354682<br />005.500-006.000 6451 6369138<br />006.000-006.500 7528 7393106 </pre><br /><br /><h4>Using filters</h4><br />The filter style used here is the 'display filter' syntax of ethereal explained <a href="http://www.ethereal.com/docs/dfref/">here</a><br />Now I want to just see traffic from one of my iSCSI clients. I can filter iSCSI traffic from IP address 192.168.10.3. N.B. Use quotes to achieve boolean logic, not parentheses '( )'<br /><pre>tethereal -tad -r e0b_20080519_153919.trc -R 'ip.src==192.168.10.3 && iscsi'</pre><br /><p><br />Now I want to filer further because I have several iSCSI sessions on that client. I know that the session I am interested in is using port 4704 as its source port. Now I can filter iSCSI traffic to/from 192.168.10.3 AND the port is 4704 AND traffic is iSCSI - useful for watching one iSCSI session.<br /><pre>tethereal -tad -r e0b_20080519_153919.trc -R 'ip.addr==192.168.10.3 && iscsi &&; tcp.port==4704' </pre><br /></p><br />Here is that filter in action. We see that we only see writes to a specific LUN which is what we expect in this example since I know that each session on the client only writes to one iSCSI LUN.<br /><pre><br />-bash-3.00$ sudo tethereal -tad -r e0b_20080519_153919.trc -R 'ip.addr==192.168.10.3 && iscsi && tcp.port==4704'<br />16620 2008-05-19 15:39:19.894110 192.168.10.3 -> 192.168.10.5 iSCSI SCSI: Read(10) LUN: 0x0a (LBA: 0x00000001, Len: 1)<br />17072 2008-05-19 15:39:19.935890 192.168.10.5 -> 192.168.10.3 iSCSI SCSI: Data In LUN: 0x0a (Read(10) Response Data) SCSI: Response LUN: 0x0a (Read(10)) (Good)<br />17172 2008-05-19 15:39:19.943567 192.168.10.3 -> 192.168.10.5 iSCSI SCSI: Write(10) LUN: 0x0a (LBA: 0x0146c3a0, Len: 96)SCSI: Data Out LUN: 0x0a (Write(10) Request Data)<br />39667 2008-05-19 15:39:20.957360 192.168.10.3 -> 192.168.10.5 iSCSI SCSI: Write(10) LUN: 0x0a (LBA: 0x0146c400, Len: 96)SCSI: Data Out LUN: 0x0a (Write(10) Request Data)<br />39909 2008-05-19 15:39:21.019261 192.168.10.5 -> 192.168.10.3 iSCSI SCSI: Response LUN: 0x0a (Write(10)) (Good)<br />40226 2008-05-19 15:39:21.036799 192.168.10.3 -> 192.168.10.5 iSCSI SCSI: Write(10) LUN: 0x0a (LBA: 0x0146c460, Len: 96)SCSI: Data Out LUN: 0x0a (Write(10) Request Data)<br /></pre>Garyhttp://www.blogger.com/profile/03674881180431139945noreply@blogger.com0tag:blogger.com,1999:blog-3103125492321932129.post-36535962336922091482008-04-01T14:24:00.003-04:002008-08-08T09:53:52.269-04:00Commnd line options in perl# Usage ./this_script-f /tmp/somefile.out -l 21,22,23,24<br /><br />use Getopt::Std;<br /><br />#Required if using strict.<br />our($opt_f,$opt_l);<br /><br /><br />getopt('fl');<br /><br />my $inputfile=$opt_f;<br /><br />my @list=split /,/,$opt_l;Garyhttp://www.blogger.com/profile/03674881180431139945noreply@blogger.com1tag:blogger.com,1999:blog-3103125492321932129.post-30964532066899482412008-04-01T13:37:00.002-04:002008-04-01T13:39:22.764-04:00Editing long lines in vi<pre><br />:set nowrap<br /></pre><br /><br />That's it.<br /> <div class="flockcredit" style="text-align: right; color: #CCC; font-size: x-small;">Blogged with the <a href="http://www.flock.com/blogged-with-flock" style="color: #999; font-weight: bold;" target="_new" title="Flock Browser">Flock Browser</a></div>Garyhttp://www.blogger.com/profile/03674881180431139945noreply@blogger.com1tag:blogger.com,1999:blog-3103125492321932129.post-79393882097125817782008-03-07T09:26:00.002-05:002008-03-10T16:06:36.953-04:00FAST papers & dedupe.Papers are available from the recent FAST (File And Storage Technologies) on <a href="http://www.usenix.org/event/fast08/tech/">their site</a>. Rik pointed me to a particularly interesting paper on how Data Domain are able to <a href="http://www.usenix.org/events/fast08/tech/zhu.html">achieve inline de-duplication</a>. It seems that they really are focussed on backup only, and the techniques probably wouldn't work nearly as well for applications that do not stream data to the device.Garyhttp://www.blogger.com/profile/03674881180431139945noreply@blogger.com0tag:blogger.com,1999:blog-3103125492321932129.post-25253007387421647462008-02-05T17:04:00.001-05:002008-02-05T17:04:49.867-05:00FAST '07 Technical Sessions<blockquote cite="http://www.usenix.org/events/fast07/tech/"><img src="http://www.usenix.org/events/fast07/art/fast07_banner_725.jpg" /></blockquote><cite cite="http://www.usenix.org/events/fast07/tech/"><a href="http://www.usenix.org/events/fast07/tech/">FAST '07 Technical Sessions</a></cite><br /><p style="text-align: right; font-size: 8px">Blogged with <a href="http://www.flock.com/blogged-with-flock" title="Flock" target="_new">Flock</a></p>Garyhttp://www.blogger.com/profile/03674881180431139945noreply@blogger.com0tag:blogger.com,1999:blog-3103125492321932129.post-84876183967961084682008-02-02T22:04:00.001-05:002008-02-02T22:34:28.204-05:00Super Furry Animals at Cats CradleWe had the pleasure Super Furry animals in Chapel Hill this week, Pete Brooker was over from the UK and so we had a small crowd of neighbors and NetAppers with us.<br /><br /><img src="http://farm3.static.flickr.com/2195/2232652723_82da0a60c1.jpg?v=0" alt="" onload="show_notes_initially();" class="reflect" height="342" width="500" /><img style="position: relative; top: -344px; margin-bottom: -344px; display: block;" src="http://l.yimg.com/www.flickr.com/images/spaceball.gif" alt="" height="342" width="500" /><p style="text-align: right; font-size: 8px">Blogged with <a href="http://www.flock.com/blogged-with-flock" title="Flock" target="_new">Flock</a></p>Garyhttp://www.blogger.com/profile/03674881180431139945noreply@blogger.com0tag:blogger.com,1999:blog-3103125492321932129.post-88535401749493278572008-01-11T09:25:00.000-05:002008-01-11T09:30:15.348-05:00OS X pmapLooking for something like Solaris' 'pmap' on OS X? Try 'vmmap' from the terminal window. It outputs the per-segment memory usage, and all the usual stuff like which libraries are mapped, and where. The final section gives a nice summary. The o/p below is from Firefox, which was using over 700Mb of pysical RAM. I am currently experimenting with Flock, which supposedly has better memory management. I think the first issue I might have is that I use the 1Passwd utility pretty heavily, and I do not know if it is supported in the flock browser.<br /><br /><pre><br />==== Summary for process 1473<br />ReadOnly portion of Libraries: Total=130.6M resident=44.2M(34%) swapped_out_or_unallocated=86.3M(66%)<br />Writable regions: Total=1.8G written=1.0G(53%) resident=875.7M(46%) swapped_out=552.6M(29%) unallocated=1.0G(54%)<br /><br />REGION TYPE [ VIRTUAL]<br />=========== [ =======]<br />ATS (font support) [ 33.9M]<br />CG backing stores [ 11.9M]<br />CG raster data [ 2084K]<br />CG shared images [ 3208K]<br />Carbon [ 1464K]<br />CoreGraphics [ 328K]<br />IOKit [ 256.0M]<br />Java [ 161.0M]<br />MALLOC [ 1.3G]<br />Mach message [ 8K]<br />Memory tag=240 [ 4K]<br />STACK GUARD [ 56.3M]<br />Stack [ 20.0M]<br />VM_ALLOCATE ? [ 16.6M]<br />__DATA [ 7780K]<br />__DATA/__OBJC [ 32K]<br />__IMAGE [ 1240K]<br />__IMPORT [ 852K]<br />__LINKEDIT [ 12.6M]<br />__OBJC [ 2296K]<br />__PAGEZERO [ 4K]<br />__TEXT [ 118.0M]<br />__UNICODE [ 532K]<br />mapped file [ 103.5M]<br />shared memory [ 50.1M]<br />shared pmap [ 4124K]<br /></pre>Garyhttp://www.blogger.com/profile/03674881180431139945noreply@blogger.com1tag:blogger.com,1999:blog-3103125492321932129.post-89101321429358389732007-12-14T17:57:00.001-05:002007-12-16T18:25:48.957-05:00Use asmcmd to see what's in the ASM databaseThere are probably other/better ways to see what datafiles are being managed by ASM, but this is one way. The command asmcmd lives in the $ORACLE_HOME/bin irectory. In this example I have created an ASM area for my database files, control files etc. By cd'ing to the DATA directory I can see the files that are created in the group.<br /><pre><br />[oracle@beefy bin]$ asmcmd<br />ASMCMD> ls<br />DATA/<br />ASMCMD> ls DATA<br />10I/<br />control_001<br />control_002<br />data_1<br />data_10<br />data_11<br />data_12<br />data_13<br /></pre>Garyhttp://www.blogger.com/profile/03674881180431139945noreply@blogger.com0tag:blogger.com,1999:blog-3103125492321932129.post-7953431204104780372007-12-14T17:53:00.001-05:002007-12-16T18:26:12.570-05:00See what SQL is executing in Oracle 'right now'.<pre>select sesion.sid,<br /> sesion.username,<br /> optimizer_mode,<br /> hash_value,<br /> address,<br /> cpu_time,<br /> elapsed_time,<br /> sql_text<br /> from v$sqlarea sqlarea, v$session sesion<br /> where sesion.sql_hash_value = sqlarea.hash_value<br /> and sesion.sql_address = sqlarea.address<br /> and sesion.username is not null</pre><br /><br /><br />I have called this 'what.sql'<br />Garyhttp://www.blogger.com/profile/03674881180431139945noreply@blogger.com0tag:blogger.com,1999:blog-3103125492321932129.post-42030794040587497482007-12-12T08:55:00.000-05:002007-12-16T18:05:44.005-05:00Useful Oracle scripts<strong>space.sql</strong> <a href="http://asktom.oracle.com/tkyte/Misc/free.html">Display tablespace size and current utilisation.</a><br /><br /><br /><pre>SQL> @space<br /><br /> %<br /> % MaxPoss Max<br />Tablespace Name KBytes Used Free Used Largest Kbytes Used<br />------------------- ------------- ------------ ------------ ------ ------------ ------------ ------<br /> m SYSTEM 1,048,576 206,976 841,600 19.7 841,488 0 .0<br />*a SYSAUX 1,048,576 200,192 848,384 19.1 848,384 0 .0<br />*a TS_DATA 503,316,480 384,733,696 118,582,784 76.4 8,257,536 0 .0<br />*a TS_DEFAULT 2,097,152 704 2,096,448 .0 2,096,448 0 .0<br />*m TS_TEMP 265,420,800 265,420,800 0 100.0 0 0 .0<br />*m TS_UNDO1 8,388,608 775,232 7,613,376 9.2 7,482,368 0 .0<br />*m TS_UNDO2 8,388,608 1,344 8,387,264 .0 8,256,256 0 .0<br /> ------------- ------------ ------------<br />sum 789,708,800 651,338,944 138,369,856<br /><br />7 rows selected.<br /></pre><br /><br /><strong>table_sizes.sql</strong> <a href="http://www.oracle-base.com/dba/monitoring/show_tables.sql">Display #rows, row length #blocks used per schema</a><br /><br /><br /><pre>SQL> @table_sizes<br />Enter value for 1: tpch<br /><br />TABLE_NAME TABLESPACE_NAME NUM_ROWS AVG_ROW_LEN BLOCKS EMPTY_BLOCKS<br />------------------------------ -------------------- ---------- ----------- ---------- ------------<br />CUSTOMER 45045500 159 440887 0<br />LINEITEM 1799937800 128 8800930 0<br />NATION TS_DEFAULT 25 102 4 0<br />ORDERS 449975200 112 2797625 0<br />PART 60001700 132 341698 0<br />PARTSUPP 240135800 144 2484286 0<br />PLAN_TABLE TS_DEFAULT 0 0 0 0<br />REGION TS_DEFAULT 5 97 4 0<br />SUPPLIER 3006700 145 28679 0<br /></pre><br /><br />Garyhttp://www.blogger.com/profile/03674881180431139945noreply@blogger.com0tag:blogger.com,1999:blog-3103125492321932129.post-64056239655497082242007-12-12T08:26:00.001-05:002007-12-12T08:30:13.220-05:00How to restart DB after deleting datafiles.The database will refuse to start if datafiles are removed from the os/storage without first removing them from within the DB. Dropping the table(s) stored on the datafiles won't cut it.<br /><br />1. connect / as sysdba<br />2. startup mount<br />3. alter databsae drop datafile '/filename' offline drop;<br /><br />The next part requires the DB to be open so...<br /><br />4. alter database open;<br />5. drop tablespace <tablespace_name> including contents;<br /><br />You can now recreate your datafiles, rebuild the tablespace and so on.Garyhttp://www.blogger.com/profile/03674881180431139945noreply@blogger.com0tag:blogger.com,1999:blog-3103125492321932129.post-37237292979787907122007-12-03T22:10:00.000-05:002007-12-16T18:27:31.115-05:00Welcome to Hotel Retro.I've been thinking for a while that I should wean myself off of expensive hotels especially since I am now paying for them myself more often than not these days. So it was um, 'handy' that our lovely travel agents have me checked into what can only be described as hotel-retro. Boasting a pre bubble-era design aesthetic it is... the 'anti-W'. Instead of psuedo-groovy deep house in the lobby we have at hotel-retro a pleasing blend of take-away food and industrial cleaner (Mmmm clean-but-greasy). In keeping with the 80's chic The Quality-Inn Sunnyvale (Persian Dr) provides the pampered traveller the nostalgic feel of 56K modems via the "Worlds Slowest Broadband".<br /><br /><a href="http://picasaweb.google.com/gary.j.little/SuperUserBlogImages/photo?authkey=SXGKyD3U6Gg#5139952703063585186"><img src="http://lh6.google.com/gary.j.little/R1THwDRp8aI/AAAAAAAAAR0/3fYZXQvJ5NE/s288/IMG_0268.JPG" /></a>Garyhttp://www.blogger.com/profile/03674881180431139945noreply@blogger.com0tag:blogger.com,1999:blog-3103125492321932129.post-20994078283016816422007-12-01T09:15:00.000-05:002007-12-03T22:36:34.133-05:00How can you not love a country that has....<br /><br />Snowflake shaped Ritz?<br /><br /><table style="width:auto;"><tr><td><a href="http://picasaweb.google.com/gary.j.little/SuperUserBlogImages/photo?authkey=SXGKyD3U6Gg#5139007191783174546"><img src="http://lh3.google.com/gary.j.little/R1Fr0DRp8ZI/AAAAAAAAARU/csMCOa2UNjc/s288/IMG_0263.JPG" /></a></td></tr><tr><tr><td style="font-family:arial,sans-serif; font-size:11px; text-align:right">From <a href="http://picasaweb.google.com/gary.j.little/SuperUserBlogImages?authkey=SXGKyD3U6Gg">super-user Bl...</a></td></tr></table>Garyhttp://www.blogger.com/profile/03674881180431139945noreply@blogger.com0tag:blogger.com,1999:blog-3103125492321932129.post-70331487950383338752007-12-01T09:01:00.000-05:002007-12-01T09:05:12.996-05:00It's cold.Don't ride your bike without gloves when there's frost on the cars. It was so cold I could only stay out for a few minutes. By the time I got back to the car my hands could hardly open the car. It reminded me of cross country runs at school in the middle of winter.<br /><br /><br />Current weather : Clear Skys -1 C.Garyhttp://www.blogger.com/profile/03674881180431139945noreply@blogger.com0tag:blogger.com,1999:blog-3103125492321932129.post-57212179355697355432007-11-27T14:16:00.000-05:002007-12-12T08:55:15.200-05:00Oracle for SysadminsSet the 'EDITOR' variable for the user 'oracle'. Doing so will allow you to edit your sqlplus commands using a reasonable editor. After executing a piece of SQL in sqlplus, just type 'edit' or 'ed' and you'll be transported to your editor. In vi just type :q to get back to the sqlplus prompt.<br /><br /><br />Create an oracle environment file in your home directory and have Oracle execute it every time you start sqlplus. Oracle will execute a command file called login.sql if it finds one in the path defined by $SQLPATH. For DBA activity you can format commonly used columns to display in a more user friendly way e.g.<br /><pre><br />set linesize 200<br />col file_name for a40<br />col tablespace_name for a20<br /></pre><br />I store this file in $HOME/env/oracle and put this directory in $SQLPATH<br /><br />Other things in the login.sql<br /><ul><br /><li><strong>set timing on</strong> Automatically print the duration of a sqlplus command.<br /></ul><br /><br />You can store your DBA scripts in the $SQLPATH too.<br /><br /><br /><h2>Supplementry packages</h2><br />You'll want to add in these packages to allow you to monitor the database<br /><ul><br /><li> statspack - sample counters in the database then report on them. Very useful for performance analysis<br /><li> dbms_space<br /></ul><br /><br /><br /><h3>Statspack</h3><br /><strong>Install the statspack tools</strong><br /><pre>SQL> @?/rdbms/admin/spcreate</pre><br /><br /><strong>Ensure timed statistics is set to true</strong><br /><pre>SQL> show parameter timed_statistics</pre><br /><pre><br />SQL> exec statspack.snap<br /><br />PL/SQL procedure successfully completed.<br /><br />Elapsed: 00:00:09.57<br />SQL> exec statspack.snap<br /><br />PL/SQL procedure successfully completed.<br /><br />Elapsed: 00:00:01.20<br />SQL> @$ORACLE_HOME/rdbms/admin/spreport<br /></pre><br /><br />If you ever need to get rid of statspack (sometimes useful if the instll crashed part way through) just run the script<br /><pre>SQL> @?/rdbms/admin/spdrop</pre>Garyhttp://www.blogger.com/profile/03674881180431139945noreply@blogger.com7tag:blogger.com,1999:blog-3103125492321932129.post-49797066650819105512007-11-24T21:37:00.001-05:002007-11-24T21:37:36.857-05:00UNC vs Duke<embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="288" height="192" flashvars="host=picasaweb.google.com&RGB=0x000000&feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fgary.j.little%2Falbumid%2F5136600344133847009%3Fkind%3Dphoto%26alt%3Drss%26authkey%3D7nA_XyzalJc" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>Garyhttp://www.blogger.com/profile/03674881180431139945noreply@blogger.com1tag:blogger.com,1999:blog-3103125492321932129.post-92222253806757783562007-11-24T21:18:00.001-05:002007-11-24T21:24:14.944-05:00PokerOur neighbor has invited me to his monthly poker evening. The only problem is that I don't know how to play. I have month to learn enough to not look an idiot.<br /><br /><a href="http://picasaweb.google.com/gary.j.little/SuperUserBlogImages/photo?authkey=SXGKyD3U6Gg#5136596341224327122"><img src="http://lh4.google.com/gary.j.little/R0jbKFE_R9I/AAAAAAAAAOg/PrDPBh853yc/s288/IMG_0253.JPG" /></a>Garyhttp://www.blogger.com/profile/03674881180431139945noreply@blogger.com0tag:blogger.com,1999:blog-3103125492321932129.post-57846711508194721052007-11-24T11:33:00.000-05:002007-11-24T11:45:07.875-05:00PhotosThis should be a photo slideshow linked to picassa.<br /><br /><br /><br /><embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="288" height="192" flashvars="host=picasaweb.google.com&RGB=0x000000&feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fgary.j.little%2Falbumid%2F5136445334469166817%3Fkind%3Dphoto%26alt%3Drss" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>Garyhttp://www.blogger.com/profile/03674881180431139945noreply@blogger.com0tag:blogger.com,1999:blog-3103125492321932129.post-4093215423818351832007-11-20T16:39:00.000-05:002007-11-20T16:42:18.036-05:00Tag cloudI got fed up with not beign able to find things I'd noted down here, so I added the ubiquitous tag cloud, <a href="http://phy3blog.googlepages.com/Beta-Blogger-Label-Cloud.html">using these instructions.</a>Garyhttp://www.blogger.com/profile/03674881180431139945noreply@blogger.com1tag:blogger.com,1999:blog-3103125492321932129.post-6884966468636971372007-11-19T08:33:00.000-05:002007-11-19T08:50:08.462-05:00American TVSo it turns out that the best thing about American TV is that there are so many adverts (which are a special type of annoying) that you *really* have to want to watch something in order to put up with it. Even BBC America . On a lot of the minor channels where we sometimes watch college sport, the advertisers obviously don't have a large marketing budget. So they JUST SHOUT and hope you'll buy the product. I guess it must work. We don't watch a lot of TV.<br /><br />I heard from a bloke in the pub that a lot of people download their TV from usenet. I'm not surprised.Garyhttp://www.blogger.com/profile/03674881180431139945noreply@blogger.com1