This is not lvm bug. lvm code analysis: ```c main lvm2_main _close_stray_fds // tools/lvmcmdline.c _close_descriptor //this func will close fd start from 3. _close_stray_fds(const char *command, struct custom_fds *custom_fds) { static const char _fd_dir[] = DEFAULT_PROC_DIR "/self/fd"; if (!(d = opendir(_fd_dir))) { if (errno != ENOENT) { log_sys_error("opendir", _fd_dir); return 0; /* broken system */ } /* Path does not exist, use the old way */ if (getrlimit(RLIMIT_NOFILE, &rlim) < 0) { log_sys_error("getrlimit", "RLIMIT_NOFILE"); return 1; } for (fd = 3; fd < (int)rlim.rlim_cur; fd++) { if ((fd != custom_fds->out) && (fd != custom_fds->err) && (fd != custom_fds->report)) { _close_descriptor(fd, suppress_warnings, command, ppid, parent_cmdline); } } return 1; } while ((dirent = readdir(d))) { fd = atoi(dirent->d_name); if ((fd > 2) && (fd != dirfd(d)) && (fd != custom_fds->out) && (fd != custom_fds->err) && (fd != custom_fds->report)) { _close_descriptor(fd, suppress_warnings, command, ppid, parent_cmdline); } } ... ... } //this function show lvm print message after close leaked fd. static void _close_descriptor(int fd, unsigned suppress_warnings, const char *command, pid_t ppid, const char *parent_cmdline) { int r; const char *filename; /* Ignore bad file descriptors */ if (!is_valid_fd(fd)) return; if (!suppress_warnings) filename = _get_filename(fd); r = close(fd); if (suppress_warnings) return; if (!r) //<=== r is 0, close(fd) returns on success. fprintf(stderr, "File descriptor %d (%s) leaked on " "%s invocation.", fd, filename, command); else if (errno == EBADF) return; else fprintf(stderr, "Close failed on stray file descriptor " "%d (%s): %s", fd, filename, strerror(errno)); fprintf(stderr, " Parent PID %" PRIpid_t ": %s\n", ppid, parent_cmdline); } ``` in linux, a process do fork who child will share its opened fd(s). lvm is child process, who parent open the fd (~/.bash_history). It looks a secret shell script open ~/.bash_history, and this shell script execute lvm after open ~/.bash_history. As Martin Loviska said in comment #2, setting the environment variable LVM_SUPPRESS_FD_WARNINGS to suppress it.