| Summary: | Команда nvme gen-hostnqn генерирует одинаковые значения | ||
|---|---|---|---|
| Product: | Sisyphus | Reporter: | Oleg Kolesnichenko <kolesnichenko> |
| Component: | nvme | Assignee: | Konstantin A Lepikhov (L.A. Kostis) <lakostis> |
| Status: | CLOSED NOTABUG | QA Contact: | qa-sisyphus |
| Severity: | normal | ||
| Priority: | P5 | CC: | amakeenk, eltsovga, kolesnichenko, lakostis, shaba |
| Version: | unstable | ||
| Hardware: | x86_64 | ||
| OS: | Linux | ||
|
Description
Oleg Kolesnichenko
2025-05-06 15:34:02 MSK
Он не может быть каждый раз разный, поскольку генерируется на основе существующего uuid. Описание из интернета: """ NVMe Qualified Name (NQN) используется для идентификации удалённого целевого хранилища NVMe в протоколе NVMe over Fabrics. Этот протокол предназначен для взаимодействия между хостом и системой хранения по сети. """ Это имя по определению не может изменяться. (Ответ для Alexander Makeenkov на комментарий #1) > Он не может быть каждый раз разный, поскольку генерируется на основе > существующего uuid. > > Описание из интернета: > """ > NVMe Qualified Name (NQN) используется для идентификации удалённого целевого > хранилища NVMe в протоколе NVMe over Fabrics. > > Этот протокол предназначен для взаимодействия между хостом и системой > хранения по сети. > """ > > Это имя по определению не может изменяться. Проблема в том, что на однотипных моделях серверов, этот NQN идентичный, и не позволяет добавить несколько серверов на СХД (СХД требует, чтобы NQN был уникальным). NQN для хостов - это уникальные номера инициаторов для СХД, они должны быть разными. В описании утилиты недвусмысленно написано "Generate a random host NQN". Описание не соответствует функционалу. Например, на Debian, эта команда каждый раз выдаёт разный номер. Проверил в: - fedora - генерируется каждый раз одно и то же значение; - ubuntu - генерируется каждый раз разное значение; - alt server (обновлён до sisyphus) - генерируется каждый раз одно и то же значение. https://github.com/linux-nvme/libnvme/blob/4cef519924249d543555c6cdd43e4c51e41fcf54/src/nvme/fabrics.c#L1430: char *nvmf_hostid_generate() { int ret; char uuid_str[NVME_UUID_LEN_STRING]; unsigned char uuid[NVME_UUID_LEN]; ret = uuid_from_dmi(uuid_str); if (ret < 0) ret = uuid_from_device_tree(uuid_str); if (ret < 0) { if (nvme_uuid_random(uuid) < 0) memset(uuid, 0, NVME_UUID_LEN); nvme_uuid_to_string(uuid, uuid_str); } return strdup(uuid_str); } ... char *nvmf_hostnqn_generate_from_hostid(char *hostid) { char *hid = NULL; char *hostnqn; int ret; if (!hostid) hostid = hid = nvmf_hostid_generate(); ret = asprintf(&hostnqn, "nqn.2014-08.org.nvmexpress:uuid:%s", hostid); free(hid); return (ret < 0) ? NULL : hostnqn; } если вы считаете данное поведение неправильным, то советую озадачить этим авторов libnvme. |