Thanks, fixes following two issues, I can get the right value:(1) Dividing
offset 0x657800(6649856) by 512 and take it as the iseek value.
(2) Run the dd command on device c2t0d0s0, not c2t0d0.

Zhihui

2009/6/26 m...@bruningsystems.com <m...@bruningsystems.com>

> Hi Zhihui Chen,
>
> zhihui Chen wrote:
>
>> Find that zio->io_offset is the absolute offset of device, not in sector
>> unit. And If we need use zdb -R to dump the block, we should use the offset
>> (zio->io_offset-0x400000).
>>
>> 2009/6/25 zhihui Chen <zhch...@gmail.com <mailto:zhch...@gmail.com>>
>>
>>
>>    I use following dtrace script to trace the postion of one file on zfs:
>>        #!/usr/sbin/dtrace -qs
>>    zio_done:entry
>>    /((zio_t *)(arg0))->io_vd/
>>    {
>>            zio=(zio_t *)arg0;
>>            printf("Offset:%x and Size:%x\n",zio->io_offset,zio->io_size);
>>            printf("vd:%x\n",(unsigned long)(zio->io_vd));
>>            printf("process name:%s\n",execname);
>>            tracemem(zio->io_data,40);
>>            stack();
>>    }
>>        and I run dd command:  "dd if=/export/dsk1/test1 bs=512 count=1",
>>    the dtrace script will generate following it output:
>>
>>    Offset:657800 and Size:200
>>    vd:ffffff02d6a1a700
>>    process name:sched
>>      aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
>>                  zfs`zio_execute+0xa0
>>                  genunix`taskq_thread+0x193
>>                  unix`thread_start+0x8
>>    ^C
>>        The tracemem output is the right context of file test1, which is a
>>    512-byte text file. "zpool status" has following output:
>>        pool: tpool
>>    state: ONLINE
>>    scrub: none requested
>>    config:
>>            NAME        STATE     READ WRITE CKSUM
>>            tpool       ONLINE       0     0     0
>>              c2t0d0    ONLINE       0     0     0
>>    errors: No known data errors
>>        My question is how to translate zio->io_offset (0x657800, equal to
>>    decimal number 6649856) outputed by dtace to block number on disk
>>    c2t0d0?
>>    I tried to use "dd if=/dev/dsk/c2t0d0 of=text iseek=6650112 bs=512
>>    count=1" for a check,but the result is not right.
>>
>>  I assume that 6650112 is offset plus 0x400000?  Try dividing 6650112 by
> 512 and using that
> as the iseek value.
> max
>
>         Thanks
>>    Zhihui
>>
>>
>> ------------------------------------------------------------------------
>>
>> _______________________________________________
>> zfs-discuss mailing list
>> zfs-discuss@opensolaris.org
>> http://mail.opensolaris.org/mailman/listinfo/zfs-discuss
>>
>>
>
>
_______________________________________________
zfs-discuss mailing list
zfs-discuss@opensolaris.org
http://mail.opensolaris.org/mailman/listinfo/zfs-discuss

Reply via email to