Compare commits
1 Commits
eafce26049
...
f92c0766b6
Author | SHA1 | Date |
---|---|---|
Vitaliy Filippov | f92c0766b6 |
|
@ -200,7 +200,6 @@ static const char *help_text =
|
||||||
" --device_size 0 Set device size\n"
|
" --device_size 0 Set device size\n"
|
||||||
" --format text Result format: json, options, env, or text\n"
|
" --format text Result format: json, options, env, or text\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Default I/O mode for commands involving disk I/O is O_DIRECT. If you don't want it, add --io cached.\n"
|
|
||||||
"Use vitastor-disk --help <command> for command details or vitastor-disk --help --all for all details.\n"
|
"Use vitastor-disk --help <command> for command details or vitastor-disk --help --all for all details.\n"
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,7 @@ int disk_tool_t::dump_journal()
|
||||||
printf("[\n");
|
printf("[\n");
|
||||||
if (all)
|
if (all)
|
||||||
{
|
{
|
||||||
dsk.journal_fd = open(dsk.journal_device.c_str(), (options["io"] == "cached" ? 0 : O_DIRECT) | O_RDONLY);
|
dsk.journal_fd = open(dsk.journal_device.c_str(), O_DIRECT|O_RDONLY);
|
||||||
if (dsk.journal_fd < 0)
|
if (dsk.journal_fd < 0)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Failed to open journal device %s: %s\n", dsk.journal_device.c_str(), strerror(errno));
|
fprintf(stderr, "Failed to open journal device %s: %s\n", dsk.journal_device.c_str(), strerror(errno));
|
||||||
|
@ -121,7 +121,7 @@ int disk_tool_t::dump_journal()
|
||||||
|
|
||||||
int disk_tool_t::process_journal(std::function<int(void*)> block_fn)
|
int disk_tool_t::process_journal(std::function<int(void*)> block_fn)
|
||||||
{
|
{
|
||||||
dsk.journal_fd = open(dsk.journal_device.c_str(), (options["io"] == "cached" ? 0 : O_DIRECT) | O_RDONLY);
|
dsk.journal_fd = open(dsk.journal_device.c_str(), O_DIRECT|O_RDONLY);
|
||||||
if (dsk.journal_fd < 0)
|
if (dsk.journal_fd < 0)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Failed to open journal device %s: %s\n", dsk.journal_device.c_str(), strerror(errno));
|
fprintf(stderr, "Failed to open journal device %s: %s\n", dsk.journal_device.c_str(), strerror(errno));
|
||||||
|
|
|
@ -14,7 +14,7 @@ int disk_tool_t::process_meta(std::function<void(blockstore_meta_header_v2_t *)>
|
||||||
fprintf(stderr, "Invalid metadata block size: is not a multiple of %d\n", DIRECT_IO_ALIGNMENT);
|
fprintf(stderr, "Invalid metadata block size: is not a multiple of %d\n", DIRECT_IO_ALIGNMENT);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
dsk.meta_fd = open(dsk.meta_device.c_str(), (options["io"] == "cached" ? 0 : O_DIRECT) | O_RDONLY);
|
dsk.meta_fd = open(dsk.meta_device.c_str(), O_DIRECT|O_RDONLY);
|
||||||
if (dsk.meta_fd < 0)
|
if (dsk.meta_fd < 0)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Failed to open metadata device %s: %s\n", dsk.meta_device.c_str(), strerror(errno));
|
fprintf(stderr, "Failed to open metadata device %s: %s\n", dsk.meta_device.c_str(), strerror(errno));
|
||||||
|
|
|
@ -257,7 +257,7 @@ int disk_tool_t::resize_copy_data()
|
||||||
iodepth = 32;
|
iodepth = 32;
|
||||||
}
|
}
|
||||||
ringloop = new ring_loop_t(iodepth < RINGLOOP_DEFAULT_SIZE ? RINGLOOP_DEFAULT_SIZE : iodepth);
|
ringloop = new ring_loop_t(iodepth < RINGLOOP_DEFAULT_SIZE ? RINGLOOP_DEFAULT_SIZE : iodepth);
|
||||||
dsk.data_fd = open(dsk.data_device.c_str(), (options["io"] == "cached" ? 0 : O_DIRECT) | O_RDWR);
|
dsk.data_fd = open(dsk.data_device.c_str(), O_DIRECT|O_RDWR);
|
||||||
if (dsk.data_fd < 0)
|
if (dsk.data_fd < 0)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Failed to open data device %s: %s\n", dsk.data_device.c_str(), strerror(errno));
|
fprintf(stderr, "Failed to open data device %s: %s\n", dsk.data_device.c_str(), strerror(errno));
|
||||||
|
@ -452,7 +452,7 @@ int disk_tool_t::resize_rewrite_journal()
|
||||||
|
|
||||||
int disk_tool_t::resize_write_new_journal()
|
int disk_tool_t::resize_write_new_journal()
|
||||||
{
|
{
|
||||||
new_journal_fd = open(new_journal_device.c_str(), (options["io"] == "cached" ? 0 : O_DIRECT) | O_RDWR);
|
new_journal_fd = open(new_journal_device.c_str(), O_DIRECT|O_RDWR);
|
||||||
if (new_journal_fd < 0)
|
if (new_journal_fd < 0)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Failed to open new journal device %s: %s\n", new_journal_device.c_str(), strerror(errno));
|
fprintf(stderr, "Failed to open new journal device %s: %s\n", new_journal_device.c_str(), strerror(errno));
|
||||||
|
@ -521,7 +521,7 @@ int disk_tool_t::resize_rewrite_meta()
|
||||||
|
|
||||||
int disk_tool_t::resize_write_new_meta()
|
int disk_tool_t::resize_write_new_meta()
|
||||||
{
|
{
|
||||||
new_meta_fd = open(new_meta_device.c_str(), (options["io"] == "cached" ? 0 : O_DIRECT) | O_RDWR);
|
new_meta_fd = open(new_meta_device.c_str(), O_DIRECT|O_RDWR);
|
||||||
if (new_meta_fd < 0)
|
if (new_meta_fd < 0)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Failed to open new metadata device %s: %s\n", new_meta_device.c_str(), strerror(errno));
|
fprintf(stderr, "Failed to open new metadata device %s: %s\n", new_meta_device.c_str(), strerror(errno));
|
||||||
|
|
|
@ -122,7 +122,7 @@ uint32_t disk_tool_t::write_osd_superblock(std::string device, json11::Json para
|
||||||
sb->size = sb_size;
|
sb->size = sb_size;
|
||||||
memcpy(sb->json_data, json_data.c_str(), json_data.size());
|
memcpy(sb->json_data, json_data.c_str(), json_data.size());
|
||||||
sb->crc32c = crc32c(0, &sb->size, sb->size - ((uint8_t*)&sb->size - buf));
|
sb->crc32c = crc32c(0, &sb->size, sb->size - ((uint8_t*)&sb->size - buf));
|
||||||
int fd = open(device.c_str(), (options["io"] == "cached" ? 0 : O_DIRECT) | O_RDWR);
|
int fd = open(device.c_str(), O_DIRECT|O_RDWR);
|
||||||
if (fd < 0)
|
if (fd < 0)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Failed to open device %s: %s\n", device.c_str(), strerror(errno));
|
fprintf(stderr, "Failed to open device %s: %s\n", device.c_str(), strerror(errno));
|
||||||
|
@ -150,7 +150,7 @@ json11::Json disk_tool_t::read_osd_superblock(std::string device, bool expect_ex
|
||||||
json11::Json osd_params;
|
json11::Json osd_params;
|
||||||
std::string json_err;
|
std::string json_err;
|
||||||
std::string real_device, device_type, real_data, real_meta, real_journal;
|
std::string real_device, device_type, real_data, real_meta, real_journal;
|
||||||
int r, fd = open(device.c_str(), (options["io"] == "cached" ? 0 : O_DIRECT) | O_RDWR);
|
int r, fd = open(device.c_str(), O_DIRECT|O_RDWR);
|
||||||
if (fd < 0)
|
if (fd < 0)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Failed to open device %s: %s\n", device.c_str(), strerror(errno));
|
fprintf(stderr, "Failed to open device %s: %s\n", device.c_str(), strerror(errno));
|
||||||
|
@ -385,7 +385,7 @@ int disk_tool_t::pre_exec_osd(std::string device)
|
||||||
int disk_tool_t::clear_osd_superblock(const std::string & dev)
|
int disk_tool_t::clear_osd_superblock(const std::string & dev)
|
||||||
{
|
{
|
||||||
uint8_t *buf = (uint8_t*)memalign_or_die(MEM_ALIGNMENT, 4096);
|
uint8_t *buf = (uint8_t*)memalign_or_die(MEM_ALIGNMENT, 4096);
|
||||||
int fd = -1, r = open(dev.c_str(), (options["io"] == "cached" ? 0 : O_DIRECT) | O_RDWR);
|
int fd = -1, r = open(dev.c_str(), O_DIRECT|O_RDWR);
|
||||||
if (r >= 0)
|
if (r >= 0)
|
||||||
{
|
{
|
||||||
fd = r;
|
fd = r;
|
||||||
|
|
|
@ -27,16 +27,16 @@ for i in $(seq 1 $OSD_COUNT); do
|
||||||
offsets=$(build/src/disk_tool/vitastor-disk simple-offsets --format json ./testdata/bin/test_osd$i.bin)
|
offsets=$(build/src/disk_tool/vitastor-disk simple-offsets --format json ./testdata/bin/test_osd$i.bin)
|
||||||
meta_offset=$(echo $offsets | jq -r .meta_offset)
|
meta_offset=$(echo $offsets | jq -r .meta_offset)
|
||||||
data_offset=$(echo $offsets | jq -r .data_offset)
|
data_offset=$(echo $offsets | jq -r .data_offset)
|
||||||
build/src/disk_tool/vitastor-disk dump-journal --io cached --json ./testdata/bin/test_osd$i.bin 4096 0 $meta_offset >./testdata/journal_before_resize.json
|
build/src/disk_tool/vitastor-disk dump-journal --json ./testdata/bin/test_osd$i.bin 4096 0 $meta_offset >./testdata/journal_before_resize.json
|
||||||
build/src/disk_tool/vitastor-disk dump-meta --io cached ./testdata/bin/test_osd$i.bin 4096 $meta_offset $((data_offset-meta_offset)) >./testdata/meta_before_resize.json
|
build/src/disk_tool/vitastor-disk dump-meta ./testdata/bin/test_osd$i.bin 4096 $meta_offset $((data_offset-meta_offset)) >./testdata/meta_before_resize.json
|
||||||
build/src/disk_tool/vitastor-disk raw-resize --io cached \
|
build/src/disk_tool/vitastor-disk raw-resize \
|
||||||
$(build/src/disk_tool/vitastor-disk simple-offsets --format options ./testdata/bin/test_osd$i.bin 2>/dev/null) \
|
$(build/src/disk_tool/vitastor-disk simple-offsets --format options ./testdata/bin/test_osd$i.bin 2>/dev/null) \
|
||||||
--new_meta_offset 0 \
|
--new_meta_offset 0 \
|
||||||
--new_meta_len $((1024*1024)) \
|
--new_meta_len $((1024*1024)) \
|
||||||
--new_journal_offset $((1024*1024)) \
|
--new_journal_offset $((1024*1024)) \
|
||||||
--new_data_offset $((128*1024*1024+32768))
|
--new_data_offset $((128*1024*1024+32768))
|
||||||
build/src/disk_tool/vitastor-disk dump-journal --io cached --json ./testdata/bin/test_osd$i.bin 4096 $((1024*1024)) $((127*1024*1024)) >./testdata/journal_after_resize.json
|
build/src/disk_tool/vitastor-disk dump-journal --json ./testdata/bin/test_osd$i.bin 4096 $((1024*1024)) $((127*1024*1024)) >./testdata/journal_after_resize.json
|
||||||
build/src/disk_tool/vitastor-disk dump-meta --io cached ./testdata/bin/test_osd$i.bin 4096 0 $((1024*1024)) >./testdata/meta_after_resize.json
|
build/src/disk_tool/vitastor-disk dump-meta ./testdata/bin/test_osd$i.bin 4096 0 $((1024*1024)) >./testdata/meta_after_resize.json
|
||||||
if ! (cat ./testdata/meta_before_resize.json ./testdata/meta_after_resize.json | \
|
if ! (cat ./testdata/meta_before_resize.json ./testdata/meta_after_resize.json | \
|
||||||
jq -e -s 'map([ .entries[] | del(.block) ] | sort_by(.pool, .inode, .stripe)) | .[0] == .[1] and (.[0] | length) > 1000'); then
|
jq -e -s 'map([ .entries[] | del(.block) ] | sort_by(.pool, .inode, .stripe)) | .[0] == .[1] and (.[0] | length) > 1000'); then
|
||||||
format_error "OSD $i metadata corrupted after resizing"
|
format_error "OSD $i metadata corrupted after resizing"
|
||||||
|
|
Loading…
Reference in New Issue