diff -uNrp zabbix-2.0.3.orig/src/libs/zbxsysinfo/aix/aix.c zabbix-2.0.3/src/libs/zbxsysinfo/aix/aix.c
--- zabbix-2.0.3.orig/src/libs/zbxsysinfo/aix/aix.c	2012-10-03 23:41:35.000000000 +0900
+++ zabbix-2.0.3/src/libs/zbxsysinfo/aix/aix.c	2012-10-31 16:34:46.160567351 +0900
@@ -27,6 +27,9 @@ ZBX_METRIC	parameters_specific[] =
 	{"vfs.fs.inode",	CF_USEUPARAM,	VFS_FS_INODE,		NULL,	"/,free"},
 	{"vfs.fs.discovery",	0,		VFS_FS_DISCOVERY,	NULL,	NULL},
 
+	{"vfs.dev.read",	CF_USEUPARAM,	VFS_DEV_READ,	NULL,	"hdisk0,bytes"},
+	{"vfs.dev.write",	CF_USEUPARAM,	VFS_DEV_WRITE,	NULL,	"hdisk0,bytes"},
+
 	{"net.if.in",		CF_USEUPARAM,	NET_IF_IN,		NULL,	"lo0,bytes"},
 	{"net.if.out",		CF_USEUPARAM,	NET_IF_OUT,		NULL,	"lo0,bytes"},
 	{"net.if.total",	CF_USEUPARAM,	NET_IF_TOTAL,		NULL,	"lo0,bytes"},
diff -uNrp zabbix-2.0.3.orig/src/libs/zbxsysinfo/aix/diskio.c zabbix-2.0.3/src/libs/zbxsysinfo/aix/diskio.c
--- zabbix-2.0.3.orig/src/libs/zbxsysinfo/aix/diskio.c	2012-10-03 23:41:35.000000000 +0900
+++ zabbix-2.0.3/src/libs/zbxsysinfo/aix/diskio.c	2012-11-07 18:40:13.932451393 +0900
@@ -20,7 +20,149 @@
 #include "common.h"
 #include "sysinfo.h"
 
+typedef struct
+{
+	zbx_uint64_t	nread;
+	zbx_uint64_t	nwritten;
+}
+disk_stat_t;
+
+static disk_stat_t disk_stat;
+
 int	get_diskstat(const char *devname, zbx_uint64_t *dstat)
 {
 	return FAIL;
 }
+
+static int get_diskstat_io(const char *devname, disk_stat_t *zk)
+{
+	int	i, numDisks;
+
+	assert(zk);
+
+#if defined(HAVE_LIBPERFSTAT)
+
+	numDisks = perfstat_disk(NULL, NULL, sizeof(perfstat_disk_t), 0);
+
+	/* check that the system actually has disks */
+	if (numDisks == -1)
+		return SYSINFO_RET_FAIL;
+
+	/* check whether we want all the devices or a particular one */
+	if ('\0' != *devname)
+	{
+		perfstat_disk_t *data = NULL;
+		perfstat_id_t name;
+
+		strscpy(name.name, devname);
+
+		data = zbx_malloc(data, sizeof(perfstat_disk_t));
+
+		if (0 < perfstat_disk(&name, data, sizeof(perfstat_disk_t), 1))
+		{
+			zk->nread = data[0].rblks * data[0].bsize;
+			zk->nwritten = data[0].wblks * data[0].bsize;
+
+			zbx_free(data);
+
+			return SYSINFO_RET_OK;
+		}
+		else
+		{
+			zbx_free(data);
+
+			return SYSINFO_RET_FAIL;
+		}
+	}
+	else {	
+		perfstat_disk_total_t data;
+
+		/* obtain the data for all the disks available */
+		if (0 < perfstat_disk_total(NULL, &data, sizeof(perfstat_disk_total_t), 1))
+		{
+			zk->nread = data.rblks * 512;
+			zk->nwritten = data.wblks * 512;
+
+			return SYSINFO_RET_OK;
+		}
+		else
+		{
+			return SYSINFO_RET_FAIL;
+		}
+	}
+#else	/* if the AIX libperfstat API library is not available on the system */
+	return SYSINFO_RET_FAIL;
+#endif
+}
+
+static int	VFS_DEV_READ_BYTES(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result)
+{
+	int	ret;
+
+	if (SYSINFO_RET_OK == (ret = get_diskstat_io(param, &disk_stat)))
+		SET_UI64_RESULT(result, disk_stat.nread);
+
+	return ret;
+}
+
+static int	VFS_DEV_WRITE_BYTES(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result)
+{
+	int	ret;
+
+	if (SYSINFO_RET_OK == (ret = get_diskstat_io(param, &disk_stat)))
+		SET_UI64_RESULT(result, disk_stat.nwritten);
+
+	return ret;
+}
+
+static int	process_mode_function(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result,
+	const MODE_FUNCTION *fl)
+{
+	char	devname[MAX_STRING_LEN], mode[16];
+	int	i;
+
+	if (2 < num_param(param))
+		return SYSINFO_RET_FAIL;
+
+	if (0 != get_param(param, 1, devname, sizeof(devname)) || 0 == strcmp("all", devname))
+		*devname = '\0';
+
+	if (0 != get_param(param, 2, mode, sizeof(mode)))
+		*mode = '\0';
+
+	if ('\0' == *mode)
+	{
+		/* default parameter */
+		strscpy(mode, "bytes");
+	}
+
+	for (i = 0; NULL != fl[i].mode; i++)
+	{
+		if (0 == strcmp(mode, fl[i].mode))
+			return (fl[i].function)(cmd, devname, flags, result);
+	}
+
+	return SYSINFO_RET_FAIL;
+}
+
+int	VFS_DEV_READ(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result)
+{
+	const MODE_FUNCTION fl[] =
+	{
+		{"bytes",	VFS_DEV_READ_BYTES},
+		{NULL, NULL}
+	};
+
+	return process_mode_function(cmd, param, flags, result, fl);
+}
+
+int	VFS_DEV_WRITE(const char *cmd, const char *param, unsigned flags, AGENT_RESULT *result)
+{
+	const MODE_FUNCTION fl[] =
+	{
+		{"bytes",	VFS_DEV_WRITE_BYTES},
+		{NULL,	NULL}
+	};
+
+	return process_mode_function(cmd, param, flags, result, fl);
+}
