
У меня есть второй HDD, который был моей старой ОС. Когда я загружаю его, папка /var/lib/mysql — это mysql:mysql, но когда я монтирую его (LVM) в моей новой ОС, это nvidia-persistenced:vboxusers.
Я хочу выполнить команду cp -pr для новой системы, но не могу, так как разрешения такие.
Есть идеи?
решение1
Имена пользователей на самом деле просто сопоставлены с UID, хранящимися в /etc/passwd
. Аналогично имена групп сопоставлены с GID из /etc/group
. Идентификаторы определяются по мере необходимости. 0 всегда является root, но почти все остальное определяется при создании пользователя и групп.
Эти *ID являются почти произвольными целыми числами, которые система интерпретирует как определенных пользователей и группы. ID определяются по мере необходимости. 0 всегда является root, но почти все остальное определяется при создании пользователя и групп.
Когда файл записывается на диск, на диске сохраняются именно эти значения UID и GID, а не строковое представление. И вот что здесь происходит. Ваши сопоставления user→UID и group→GID в вашей вторичной установке не совпадают с UID из вашей первой установки. Это сопоставление владельца файла не тем пользователям.
Если ваша старая установка никогда не будет иметь значения, я бы просто переназначил владельца пользователю mysql:
sudo chown --recursive mysql: /var/lib/mysql
Я проверил реальную установку MySQL, и все файлы в моей системе /var/lib/mysql
принадлежат кому-либо, mysql:mysql
поэтому я думаю, что это должно быть верно.
Если старая установка будет использоваться снова (например, в стиле двойной загрузки), вам придется быть более креативным. В таких случаях вам может потребоваться изменить сопоставление UID и GID пользователям и группам, чтобы они были одинаковыми (а затем исправить соответствующие файлы из новой системы). Это было бы довольно утомительно.