SPARCアーキテクチャでは、HDDの先頭にディスクラベルがあり、ディスクラベルに含まれるVTOCによりスライスが定義されている。
ディスクラベル
dklabel.hで以下のように定義されている
/*/** Miscellaneous defines*/#define DKL_MAGIC 0xDABE /* magic number */#define FKL_MAGIC 0xff /* magic number for DOS floppies */#define DKMAP 8 /* # of logical partitions *//** Format of a Sun SMD disk label.* Resides in cylinder 0, head 0, sector 0.** sizeof (struct dk_label) should be 512 (sector size)*/struct dk_label {char dkl_asciilabel[128]; /* for compatibility */char dkl_pad[512-(128+NDKMAP*8+14*2)];unsigned short dkl_rpm; /* rotations per minute */unsigned short dkl_pcyl; /* # physical cylinders */unsigned short dkl_apc; /* alternates per cylinder */unsigned short dkl_obs1; /* obsolete */unsigned short dkl_obs2; /* obsolete */unsigned short dkl_intrlv; /* interleave factor */unsigned short dkl_ncyl; /* # of data cylinders */unsigned short dkl_acyl; /* # of alternate cylinders */unsigned short dkl_nhead; /* # of heads in this partition */unsigned short dkl_nsect; /* # of 512 byte sectors per track */unsigned short dkl_obs3; /* obsolete */unsigned short dkl_obs4; /* obsolete *//* */struct dk_map { /* logical partitions */daddr_t dkl_cylno; /* starting cylinder */daddr_t dkl_nblk; /* number of blocks */} dkl_map[NDKMAP];unsigned short dkl_magic; /* identifies this label format */unsigned short dkl_cksum; /* xor checksum of sector */};
ディスクラベルを読み出してみる
# dd if=/dev/rdsk/c0t0d0s2 of=disk_label count=1# dd if=/dev/rdsk/c0t0d0s2 of=disk_label count=1
読み出した実際のデータを定義に当てはめてみる
dkl_asciilabel = "ST320011A cyl 38790 alt 2 hd 16 sec 63"dkl_asciilabel = "ST320011A cyl 38790 alt 2 hd 16 sec 63"dkl_pad = .......dkl_rpm = 0x1518 = 5400dkl_pcyl = 0x9788 = 38792dkl_apc = 0x0000dkl_obs1 = 0x0000dkl_obs2 = 0x0000dkl_intrlv = 0x0001dkl_ncyl = 0x9786 = 38790dkl_acyl = 0x0002dkl_nhead = 0x0010 = 16dkl_nsect = 0x003F = 63dkl_obs3 = 0x0000dkl_obs4 = 0x0000dkl_map[0].dkl_cylno = 0x00002DB1 = 11697dkl_map[0].dkl_nblk = 0x01A0B6B0 = 27309744dkl_map[1].dkl_cylno = 0x00000000dkl_map[1].dkl_nblk = 0x000FFF00 = 1048320dkl_map[2].dkl_cylno = 0x00000000dkl_map[2].dkl_nblk = 0x02549FA0 = 39100320dkl_map[3].dkl_cylno = 0x00000000dkl_map[3].dkl_nblk = 0x00000000dkl_map[4].dkl_cylno = 0x00000000dkl_map[4].dkl_nblk = 0x00000000dkl_map[5].dkl_cylno = 0x00000000dkl_map[5].dkl_nblk = 0x00000000dkl_map[6].dkl_cylno = 0x00000000dkl_map[6].dkl_nblk = 0x00000000dkl_map[7].dkl_cylno = 0x00000410 = 1040dkl_map[7].dkl_nblk = 0x00A3E9F0 = 10742256dkl_magic = 0xDABEdkl_cksum = 0x002A
prtvtocコマンドから得られる値
# prtvtoc /dev/rdsk/c0t0d0s2# prtvtoc /dev/rdsk/c0t0d0s2* /dev/rdsk/c0t0d0s2 partition map** Dimensions:* 512 bytes/sector* 63 sectors/track* 16 tracks/cylinder* 1008 sectors/cylinder* 38792 cylinders* 38790 accessible cylinders** Flags:* 1: unmountable* 10: read-only** First Sector Last* Partition Tag Flags Sector Count Sector Mount Directory0 2 00 11790576 27309744 39100319 /1 3 01 0 1048320 10483192 5 00 0 39100320 391003197 8 00 1048320 10742256 11790575 /export/home
実はVTOCはもうオワコン気味で、2TBを超えるHDDを扱う場合は下記を参照。
0 件のコメント:
コメントを投稿