140072 【文件系统】使用备份还原工具还原系统后,创建同名不同用户id的用户,插入u盘后无权限打开
This commit is contained in:
parent
dc4f547e5f
commit
a2ea352c18
|
@ -16,6 +16,7 @@ SystemRestoreProxy::SystemRestoreProxy()
|
||||||
{
|
{
|
||||||
m_bSuccess = false;
|
m_bSuccess = false;
|
||||||
m_p = nullptr;
|
m_p = nullptr;
|
||||||
|
m_bRetainUserData = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -335,6 +336,7 @@ void SystemRestoreProxy::restoreSystem()
|
||||||
// 自动更新的备份还原时保留用户数据
|
// 自动更新的备份还原时保留用户数据
|
||||||
if (m_curUuid == AUTO_BACKUP_UUID || m_backupWrapper.m_type == BackupType::RESTORE_SYSTEM_WITH_DATA) {
|
if (m_curUuid == AUTO_BACKUP_UUID || m_backupWrapper.m_type == BackupType::RESTORE_SYSTEM_WITH_DATA) {
|
||||||
args = getRsyncArgs(SystemRestoreScene::RESTORE_SYSTEM_WITH_DATA);
|
args = getRsyncArgs(SystemRestoreScene::RESTORE_SYSTEM_WITH_DATA);
|
||||||
|
m_bRetainUserData = true;
|
||||||
} else {
|
} else {
|
||||||
args = getRsyncArgs(SystemRestoreScene::SYSTEM_RESTORE);
|
args = getRsyncArgs(SystemRestoreScene::SYSTEM_RESTORE);
|
||||||
}
|
}
|
||||||
|
@ -358,11 +360,11 @@ void SystemRestoreProxy::restoreSystem()
|
||||||
fileIfSync.replace("//", "/");
|
fileIfSync.replace("//", "/");
|
||||||
QFileInfo file(fileIfSync);
|
QFileInfo file(fileIfSync);
|
||||||
QDateTime beginTime = file.fileTime(QFileDevice::FileModificationTime);
|
QDateTime beginTime = file.fileTime(QFileDevice::FileModificationTime);
|
||||||
// if (Utils::isHuawei990() && FACTORY_BACKUP_UUID == m_curUuid && m_backupWrapper.m_type == BackupType::RESTORE_SYSTEM) {
|
if (FACTORY_BACKUP_UUID == m_curUuid && m_backupWrapper.m_type == BackupType::RESTORE_SYSTEM) {
|
||||||
// // 出厂还原有的机器上删除/home/xxx有残留,故在此再强制删除一下,sudo rm -rf命令一遍还删除不了(报错:无法删除/home/xx/.config:目录非空,应该是删除后又自动生成了),多删除几次还不是非常干净,^_^
|
// 出厂还原有的机器上删除/home/xxx有残留,故在此再强制删除一下,sudo rm -rf命令一遍还删除不了(报错:无法删除/home/xx/.config:目录非空,应该是删除后又自动生成了),多删除几次还不是非常干净,^_^
|
||||||
// removeHome(Utils::getSysRootPath() + "/home");
|
removeHome(Utils::getSysRootPath() + "/home");
|
||||||
// removeHome(Utils::getSysRootPath() + "/data/home");
|
removeHome(Utils::getSysRootPath() + "/data/home");
|
||||||
// }
|
}
|
||||||
QProcess::execute("sync");
|
QProcess::execute("sync");
|
||||||
Utils::wait(20);
|
Utils::wait(20);
|
||||||
Utils::updateSyncFile();
|
Utils::updateSyncFile();
|
||||||
|
@ -384,6 +386,29 @@ void SystemRestoreProxy::restoreSystem()
|
||||||
m_p->start(args, false);
|
m_p->start(args, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 获取备份点里存在家目录的用户列表
|
||||||
|
* @param void
|
||||||
|
* @return 获取备份点里存在家目录的用户列表
|
||||||
|
*/
|
||||||
|
QStringList SystemRestoreProxy::getBackupPointUsers()
|
||||||
|
{
|
||||||
|
// 根据备份点里的/home或/data/home的子目录进行统计
|
||||||
|
QStringList users = getBackupPointUsers(m_backupPath + "/home");
|
||||||
|
users.append(getBackupPointUsers(m_backupPath + "/data/home"));
|
||||||
|
return users;
|
||||||
|
}
|
||||||
|
|
||||||
|
QStringList SystemRestoreProxy::getBackupPointUsers(const QString& path)
|
||||||
|
{
|
||||||
|
QDir dir(path);
|
||||||
|
if (dir.exists()) {
|
||||||
|
return dir.entryList(QDir::NoDotAndDotDot | QDir::Dirs);
|
||||||
|
} else {
|
||||||
|
return QStringList();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief 删除home子目录,此处主要用于删除用户残留信息
|
* @brief 删除home子目录,此处主要用于删除用户残留信息
|
||||||
* @param path
|
* @param path
|
||||||
|
@ -393,13 +418,15 @@ void SystemRestoreProxy::removeHome(const QString& path)
|
||||||
{
|
{
|
||||||
QDir dir(path);
|
QDir dir(path);
|
||||||
if (dir.exists()) {
|
if (dir.exists()) {
|
||||||
|
QStringList retainUsers = getBackupPointUsers(m_backupPath + path);
|
||||||
|
|
||||||
bool needRm = false;
|
bool needRm = false;
|
||||||
QString subcmd("rm -rf ");
|
QString subcmd("rm -rf ");
|
||||||
QString delDirs;
|
QString delDirs;
|
||||||
QStringList list = dir.entryList(QDir::NoDotAndDotDot | QDir::Dirs);
|
QStringList list = dir.entryList(QDir::NoDotAndDotDot | QDir::Dirs);
|
||||||
for (const QString& item : list) {
|
for (const QString& item : list) {
|
||||||
// 出厂备份里面的/home/oem保留
|
// 出厂备份里面的/home/oem等保留
|
||||||
if (item == "oem")
|
if (retainUsers.contains(item))
|
||||||
continue ;
|
continue ;
|
||||||
|
|
||||||
QString subPath = path;
|
QString subPath = path;
|
||||||
|
|
|
@ -42,6 +42,9 @@ private:
|
||||||
void restoreSystem();
|
void restoreSystem();
|
||||||
// 删除home下的用户家目录
|
// 删除home下的用户家目录
|
||||||
void removeHome(const QString& path);
|
void removeHome(const QString& path);
|
||||||
|
// 获取备份点里存在家目录的用户列表
|
||||||
|
QStringList getBackupPointUsers();
|
||||||
|
QStringList getBackupPointUsers(const QString& path);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief 根据场景获取rsync命令参数
|
* @brief 根据场景获取rsync命令参数
|
||||||
|
@ -67,7 +70,8 @@ private:
|
||||||
RsyncPathToDirProcess *m_p;
|
RsyncPathToDirProcess *m_p;
|
||||||
// 当前备份节点
|
// 当前备份节点
|
||||||
ParseBackupList::BackupPoint m_backupPoint;
|
ParseBackupList::BackupPoint m_backupPoint;
|
||||||
|
// 是否保留用户数据
|
||||||
|
bool m_bRetainUserData;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // SYSTEMRESTOREPROXY_H
|
#endif // SYSTEMRESTOREPROXY_H
|
||||||
|
|
|
@ -478,7 +478,7 @@ bool Utils::generateExcludePathsFile()
|
||||||
// 系统安装后有的会将/data/home /data/root挂载到的/home /root上,实际文件是存放在/data/home /data/root下面,为了统一标准保留/home /root排除/data/home /data/root
|
// 系统安装后有的会将/data/home /data/root挂载到的/home /root上,实际文件是存放在/data/home /data/root下面,为了统一标准保留/home /root排除/data/home /data/root
|
||||||
QStringList excludes;
|
QStringList excludes;
|
||||||
Utils::excludeFstabBindPath(excludes);
|
Utils::excludeFstabBindPath(excludes);
|
||||||
Utils::excludeSomeHomePath(excludes);
|
// Utils::excludeSomeHomePath(excludes);
|
||||||
Utils::excludeCustomizePath(excludes);
|
Utils::excludeCustomizePath(excludes);
|
||||||
for (const QString& item : excludes) {
|
for (const QString& item : excludes) {
|
||||||
in << item << END_LINE;
|
in << item << END_LINE;
|
||||||
|
@ -535,7 +535,7 @@ QStringList Utils::getFromExcludePathsFile()
|
||||||
// 系统安装后有的会将/data/home /data/root挂载到的/home /root上,实际文件是存放在/data/home /data/root下面
|
// 系统安装后有的会将/data/home /data/root挂载到的/home /root上,实际文件是存放在/data/home /data/root下面
|
||||||
QStringList excludes;
|
QStringList excludes;
|
||||||
Utils::excludeFstabBindPath(excludes);
|
Utils::excludeFstabBindPath(excludes);
|
||||||
Utils::excludeSomeHomePath(excludes);
|
// Utils::excludeSomeHomePath(excludes);
|
||||||
Utils::excludeCustomizePath(excludes);
|
Utils::excludeCustomizePath(excludes);
|
||||||
for (const QString& item : excludes) {
|
for (const QString& item : excludes) {
|
||||||
list << item;
|
list << item;
|
||||||
|
|
Loading…
Reference in New Issue