Check if mapped in vitastor-nbd unmap
This commit is contained in:
@@ -61,9 +61,11 @@ in `/etc/vitastor/vitastor.conf` or in other configuration file specified with `
|
|||||||
To unmap the device run:
|
To unmap the device run:
|
||||||
|
|
||||||
```
|
```
|
||||||
vitastor-nbd unmap /dev/nbd0
|
vitastor-nbd unmap [--force] /dev/nbd0
|
||||||
```
|
```
|
||||||
|
|
||||||
|
If `--force` is specified, `vitastor-nbd` doesn't check if the device is actually mapped.
|
||||||
|
|
||||||
## ls
|
## ls
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -69,9 +69,12 @@ vitastor-nbd поддерживает все обычные опции Vitastor,
|
|||||||
Для отключения устройства выполните:
|
Для отключения устройства выполните:
|
||||||
|
|
||||||
```
|
```
|
||||||
vitastor-nbd unmap /dev/nbd0
|
vitastor-nbd unmap [--force] /dev/nbd0
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Если задана опция `--force`, `vitastor-nbd` не проверяет, подключено ли устройство,
|
||||||
|
перед попыткой его отключить.
|
||||||
|
|
||||||
## ls
|
## ls
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -275,8 +275,8 @@ const char *help_text =
|
|||||||
" --foreground 1\n"
|
" --foreground 1\n"
|
||||||
" Stay in foreground, do not daemonize.\n"
|
" Stay in foreground, do not daemonize.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"vitastor-nbd unmap /dev/nbdN\n"
|
"vitastor-nbd unmap [--force] /dev/nbdN\n"
|
||||||
" Unmap an ioctl-mapped NBD device.\n"
|
" Unmap an ioctl-mapped NBD device. Do not check if it's actually mapped if --force is specified.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"vitastor-nbd ls [--json]\n"
|
"vitastor-nbd ls [--json]\n"
|
||||||
" List ioctl-mapped Vitastor NBD devices, optionally in JSON format.\n"
|
" List ioctl-mapped Vitastor NBD devices, optionally in JSON format.\n"
|
||||||
@@ -372,7 +372,8 @@ public:
|
|||||||
else if (args[i][0] == '-' && args[i][1] == '-')
|
else if (args[i][0] == '-' && args[i][1] == '-')
|
||||||
{
|
{
|
||||||
const char *opt = args[i]+2;
|
const char *opt = args[i]+2;
|
||||||
cfg[opt] = !strcmp(opt, "json") || !strcmp(opt, "all") || i == narg-1 ? "1" : args[++i];
|
cfg[opt] = !strcmp(opt, "json") || !strcmp(opt, "all") ||
|
||||||
|
!strcmp(opt, "force") || i == narg-1 ? "1" : args[++i];
|
||||||
}
|
}
|
||||||
else if (pos == 0)
|
else if (pos == 0)
|
||||||
{
|
{
|
||||||
@@ -412,7 +413,7 @@ public:
|
|||||||
fprintf(stderr, "device name or number is missing\n");
|
fprintf(stderr, "device name or number is missing\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
ioctl_unmap(cfg["dev_num"].uint64_value());
|
ioctl_unmap(cfg["dev_num"].uint64_value(), cfg["force"].bool_value());
|
||||||
}
|
}
|
||||||
#ifdef HAVE_NBD_NETLINK_H
|
#ifdef HAVE_NBD_NETLINK_H
|
||||||
else if (cfg["command"] == "netlink-map")
|
else if (cfg["command"] == "netlink-map")
|
||||||
@@ -441,9 +442,18 @@ help:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ioctl_unmap(int dev_num)
|
void ioctl_unmap(int dev_num, bool force)
|
||||||
{
|
{
|
||||||
char path[64] = { 0 };
|
char path[64] = { 0 };
|
||||||
|
// Check if mapped
|
||||||
|
sprintf(path, "/sys/block/nbd%d/pid", dev_num);
|
||||||
|
if (access(path, F_OK) != 0)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "/dev/nbd%d is not mapped: /sys/block/nbd%d/pid does not exist\n", dev_num, dev_num);
|
||||||
|
if (!force)
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
// Run unmap
|
||||||
sprintf(path, "/dev/nbd%d", dev_num);
|
sprintf(path, "/dev/nbd%d", dev_num);
|
||||||
int r, nbd = open(path, O_RDWR);
|
int r, nbd = open(path, O_RDWR);
|
||||||
if (nbd < 0)
|
if (nbd < 0)
|
||||||
|
|||||||
Reference in New Issue
Block a user