mirror of
https://github.com/ceph/ceph
synced 2025-01-23 11:33:20 +00:00
d1b69136b0
On Debian-based distros, hexdump(1) comes from FreeBSD in bsdmainutils package (other distros ship a Linux version from util-linux). It turns out that '-s skip' for anything but a regular file has been broken for ages in FreeBSD -- instead of calling fseek(), it consumed the input byte by byte with getchar(). This was fixed in commit 7cd5ae492557 "hexdump(1): Speed up -s flag on devices" last year, but it hasn't made it to the Debian world yet. bsdmainutils_9.0.6ubuntu3 in xenial had a custom patch for that, but it's no longer there in bsdmainutils_11.1.2ubuntu1 in bionic. hexdump -s <large offset> is now a fancy infinite loop! Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
42 lines
1.3 KiB
Perl
42 lines
1.3 KiB
Perl
|
|
$ get_field() {
|
|
> rbd info --format=json $1 | python -c "import sys, json; print json.load(sys.stdin)['$2']"
|
|
> }
|
|
|
|
Write to first and last sectors and make sure we hit the right objects:
|
|
|
|
$ ceph osd pool create hugeimg 12 >/dev/null 2>&1
|
|
$ rbd pool init hugeimg
|
|
$ rbd create --size 4E --object-size 4K --image-feature layering hugeimg/img
|
|
$ DEV=$(sudo rbd map hugeimg/img)
|
|
$ xfs_io -c 'pwrite 0 512' $DEV >/dev/null # first sector
|
|
$ xfs_io -c 'pwrite 4611686018427387392 512' $DEV >/dev/null # last sector
|
|
$ sudo rbd unmap $DEV
|
|
|
|
$ get_field hugeimg/img size
|
|
4611686018427387904
|
|
$ get_field hugeimg/img objects
|
|
1125899906842624
|
|
$ rados -p hugeimg ls | grep $(get_field hugeimg/img block_name_prefix) | sort
|
|
.*\.0000000000000000 (re)
|
|
.*\.0003ffffffffffff (re)
|
|
|
|
Dump first and last megabytes:
|
|
|
|
$ DEV=$(sudo rbd map hugeimg/img)
|
|
$ dd if=$DEV bs=1M count=1 status=none | hexdump
|
|
0000000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
|
|
*
|
|
0000200 0000 0000 0000 0000 0000 0000 0000 0000
|
|
*
|
|
0100000
|
|
$ dd if=$DEV bs=1M skip=4398046511103 status=none | hexdump
|
|
0000000 0000 0000 0000 0000 0000 0000 0000 0000
|
|
*
|
|
00ffe00 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
|
|
*
|
|
0100000
|
|
$ sudo rbd unmap $DEV
|
|
|
|
$ ceph osd pool delete hugeimg hugeimg --yes-i-really-really-mean-it >/dev/null 2>&1
|