我在工作时使用新电脑的融合设置(例如 128GB SSD 和 1TB HDD)。SSD 仅用于用户配置文件,所有应用程序都应安装在 HDD 上。但是,许多员工只是将所有数据转储到“桌面”或“文档”,填满了 SSD。有没有办法以某种方式将“桌面”和“文档”等文件夹中的数据重定向到 HDD,或者可能将操作系统保留在 SSD 上,但将一些用户配置文件文件夹移动到 HDD?谢谢!Kyan
答案1
移动整个用户配置文件是一种选择。最简单的方法是更改注册表中的默认配置文件位置然后创建一个新的用户以供日常使用(如果需要,您甚至可以在之后删除旧用户)。您可以移动已建立的用户配置文件,但这很麻烦;您必须在注册表中找到对旧配置文件位置的每个引用并进行更改。更好的选择是在操作系统处于离线状态时移动您的配置文件(甚至整个用户文件夹),然后创建目录连接或符号链接(symlink)从C:\Users
(或C:\Users\<username>
)到新位置。此技术在 Win8 之前也应该有效(尽管有 URL);符号链接是在 Vista 中引入的,而连接点则更古老(尽管在mklink
Vista 出现命令之前,创建它们更加麻烦)。
请注意,这两种方法基本上都不受支持。如果这样做,您可能会发现自己无法执行诸如安装服务包或就地升级 Windows 之类的操作 - 我在 Vista 计算机上遇到了这个问题,不知道它是否已经修复 - 并且还可能遇到其他问题。它也无法解决安装程序而不让您选择位置但不会安装到您的用户配置文件的问题。最后,有一种观点认为,至少应该将配置文件的核心部分 - 您的用户注册表和系统设置文件 - 放在启动盘上。这不仅会更快(如果您的启动盘是 SSD 而您的数据盘不是),还意味着如果您的数据盘坏了或被移除,您的配置文件不会变得无法使用。
为了支持“关键配置文件放在启动驱动器上,数据放在其他地方”这一想法,Windows 已经(目前已有许多版本,不确定具体是什么时候开始的)允许您更改大多数个人数据目录的位置。实际上,桌面/文档/下载/音乐/图片/视频目录已经虚拟的位置已经有一段时间了(例如,XP->Vista 在资源管理器中查看时将“我的文档”更改为“文档”,但底层文件系统名称没有不是如果您进行了就地升级,则不会更改)。打开 Windows 资源管理器,转到您的用户配置文件,然后右键单击其中一个虚拟目录。打开Properties
并转到“位置”选项卡。单击Move...
并选择数据驱动器上您希望该虚拟目录的内容驻留的目录(如果需要,请在创建后)。Windows 将提供将所有内容从当前“真实”目录移动到新目录。此后,任何试图安装到“您的文档文件夹”的内容实际上都会安装在新位置下(当然,任何只是硬编码路径而不%USER_PROFILE%\Documents\StupidApp_Stuff
通过 shell API 的内容都不会看到此更改)。也不能解决“程序只是将自己放在它想要的任何地方而不询问您”的问题……但至少这种方法得到了 Microsoft 的支持,并将您的数据(文档、音乐、保存的游戏等)与您的配置文件设置(用户注册表、应用程序数据等)分开。
为了处理程序粗鲁地将自己(或其文件)放在不想要的地方的情况,我再次推荐使用符号链接。将有问题的文件或目录(当然,在相关程序未运行时)移动到数据驱动器,然后将其原始位置替换为指向新位置的符号链接(使用mklink
)。例如,如果C:\ProgramData\RudeApp
占用了数十 GB 并浪费了 SSD 的空间,您可以尝试运行以下命令(假设使用 CMD,而不是 Powershell 或其他 shell,并假设您还没有目录D:\ProgramData
):
md D:\ProgramData
xcopy /e /k /o /h C:\ProgramData\RudeApp D:\ProgramData\RudeApp\
rd /s C:\ProgramData\RudeApp
mklink /d C:\ProgramData\RudeApp D:\ProgramData\RudeApp
这样做的目的是:
- 在 D: 驱动器上创建 ProgramData 目录(当然,ProgramData 是隐藏的,并且在 C: 驱动器上有一些棘手的 ACL,因此您可能希望使用
xcopy /k /o /h C:\ProgramData D:\ProgramData
它来获取所有元数据,尽管这也会直接复制 ProgramData 下的任何文件) - 将原始 C:\ProgramData\RudeApp 目录中的所有文件复制到数据驱动器上的新目录 (D:\ProgramData\RudeApp)。此复制是递归的(它也会复制子目录),并保留文件的安全性和属性。
- 删除原始的 C:\ProgramData\RudeApp 目录。如果您想确保一切正常,可以重命名它而不是删除它,然后再将其删除。
- 在 C:\ProgramData\RudeApp(应用程序希望找到其文件的位置)创建一个目录符号链接,该链接指向新位置 (D:\ProgramData\RudeApp)。程序(包括 Windows 资源管理器)会将该链接视为 C: 上的目录,但它仅仅是指向 D: 上目录的一个指针(在 NTFS 中为“重新解析点”)。该指针仅占用 C: 上的少量空间。
您可以安全地删除符号链接,而不会影响链接到的文件或目录。重命名符号链接也是安全的(尽管正在查找它的东西会认为您删除了该文件夹)。重命名或移动链接到文件或目录是不是安全;这将破坏链接,您需要删除它并重新创建指向新位置的链接。
答案2
连接点、硬链接等
您需要在 mklink /j 之前创建目标文件夹并复制其中的文件
MKLINK [[/D] | [/H] | [/J]] 链接目标
mklink /j Documents j:\Documents
mklink /?
来自网站开发人员小知识这篇文章对此进行了解释。 Windows 文件连接符号链接和硬链接
符号链接类似于快捷方式,但它不是以文件形式保存,而是注册到硬盘分区。它不占用任何磁盘空间,所有程序都可以识别链接和目标。符号链接可以指向计算机上本地或网络上使用 SMB 路径的任何文件或文件夹。
文件硬链接略有不同,不能在多个分区上使用,这意味着您不能将驱动器 C: 上的链接指向驱动器 D: 上的文件。文件硬链接指向目标并将其复制为镜像副本,但该副本不会使用硬盘分区上的任何额外空间。因此,镜像 1 GB 文件的 2 个硬链接总共只会使用分区上的 1 GB,而不是 3 GB。重要的是,如果删除了硬链接或目标,其他链接将保留数据。对目标或链接内容的更改会自动传播到所有其他项目。
连接点的作用类似于目录的硬链接,但与文件硬链接不同的是,您可以创建跨多个分区的连接点。同样,目录连接点及其内容存储在硬盘分区上,但它们不占用任何额外空间。目标或链接内内容的任何更改都将自动传播,除非目标目录被删除或重命名。在这种情况下,指向目标的所有链接都将中断并停留在分区上。