跳到主要内容

Windows

1. WSL2 portproxy

show all port proxy

netsh interface portproxy show all

expose 22 from wsl

netsh interface portproxy add v4tov4 listenport=22 listenaddress=0.0.0.0 connectport=22 connectaddress=INNER_IP
netsh interface portproxy add v4tov4 listenport=8080 listenaddress=0.0.0.0 connectport=8080 connectaddress=localhost

delete port proxy

netsh interface portproxy delete v4tov4 listenaddress=0.0.0.0 listenport=PORT

2. 要设置cmd.exe的默认代码页为65001 (UTF-8)

通过注册表编辑器设置:

  • 按下Win + R键打开运行命令对话框。

  • 输入regedit并按回车键,这将打开注册表编辑器。

  • 导航到以下路径:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor
  • 在该位置你可能需要创建一个新的String值(如果它还不存在):

  • 右键点击Command Processor,选择新建 -> 字符串值。

  • 命名这个新的字符串值为Autorun。

  • 双击Autorun,在“数值数据”框中输入chcp 65001并点击“确定”。

  • 关闭注册表编辑器。

这样每次cmd.exe启动时,都会自动执行chcp 65001命令将代码页设置为UTF-8。

3. 使用 robocopy 复制整个 Users 目录

当你计划复制整个 C:\Users 目录时,你的思路是完全正确的。使用 /MIR/XJ 是处理这种复杂系统文件夹的关键

直接说结论:对于复制 C:\Users 目录,使用 /MIR/XJ 不仅更好,而且是必需的,但这还不够。

下面我们详细分析为什么,以及一个真正“生产环境”级别的完整方案。

为什么 /MIR/XJ 是必需的?

  1. /MIR (镜像)

    • 优点: 它能确保目标目录和源目录完全同步。这意味着不仅会添加和更新文件,还会删除目标目录中那些源目录里已经不存在的文件。对于定期备份来说,这可以防止备份盘越来越臃肿,只保留最新状态。
    • 风险: 请务必确认你的目标文件夹是专门用于此次备份的! 如果你把目标路径错指定到一个包含其他重要文件的文件夹,/MIR 会无情地删除那些与源目录无关的文件。
  2. /XJ (排除 Junction Points - 目录联接点)

    • 绝对关键: C:\Users 目录内部为了兼容性,充满了大量的 Junctions。最典型的例子就是在 C:\Users\YourUser 下有一个名为 Application Data 的 Junction,它会指回到 C:\Users\YourUser\AppData\Roaming
    • 如果你不使用 /XJrobocopy 会进入这个 Junction,然后可能在 AppData 内部遇到另一个 Junction,从而陷入无限递归循环,直到路径超长或磁盘空间耗尽。
    • /XJ 告诉 robocopy:“看到 Junction 点了?忽略它,不要进去。” 这可以完美避免无限循环问题。

光有 /MIR/XJ 还不够:C:\Users 的特殊性

直接在运行的 Windows 系统上复制 C:\Users 会遇到两个主要障碍:

  1. 文件锁定: 你当前登录的用户配置文件(以及其他可能登录过的用户)中有大量文件是被系统锁定的,最臭名昭著的就是注册表配置单元 NTUSER.DATrobocopy 无法复制这些锁定的文件,会导致备份不完整。
  2. 权限问题: 即使你以管理员身份运行,也可能无法访问其他用户的某些私有文件夹或加密文件(EFS)。

生产环境下的最佳实践方案

为了解决上述问题,有两种推荐的方案。

方案一:离线复制 (最可靠)

这是最干净、最彻底的方法。你需要从一个非当前系统的环境中运行 robocopy

  1. 启动到恢复环境 (WinRE):

    • 按住 Shift 键,然后点击开始菜单中的“重启”。
    • 选择 疑难解答 -> 高级选项 -> 命令提示符
    • 此时,你的 Windows 系统并未完全启动,文件不会被锁定。
  2. 在 WinRE 中运行 Robocopy:

    • 在 WinRE 中,你的盘符可能会变,先用 diskpart -> list volume 确认一下你的系统盘(原C盘)和备份盘的盘符。假设系统盘是 D:,备份盘是 E:
    • 使用这个增强版指令
    robocopy "D:\Users" "E:\Backup\Users" /MIR /COPYALL /B /XJ /R:3 /W:5 /MT:16 /XD "AppData" "Local Settings" "Application Data" /XF "ntuser.dat*" /LOG:E:\Backup\users_backup_log.txt /TEE

    关键参数解释

    • /B (Backup Mode): 这是离线复制的王牌! 它使用Windows的备份权限 (SeBackupPrivilege),允许 robocopy 绕过常规的文件权限(ACLs)来读取所有文件。这解决了权限问题。
    • /XD "AppData" ...: 强烈推荐! 排除特定目录。Users 目录下的大部分空间和问题都出在 AppData,里面充满了缓存、临时文件等对备份价值不大的数据。排除它可以极大提升速度、减小备份体积。
      • AppData (包含了 Local, LocalLow, Roaming)
      • Local Settings, Application Data 等是旧的 Junctions,虽然 /XJ 会跳过,但明确排除更干净。
    • /XF "ntuser.dat*": 明确排除注册表文件。即使在 /B 模式下,处理这些文件有时也可能出问题,而且恢复它们需要特殊操作,常规文件复制意义不大。

方案二:在线复制 (使用卷影副本 - VSS)

如果你无法离线操作,唯一的办法就是使用卷影复制服务 (Volume Shadow Copy Service, VSS)。VSS可以创建一个系统当前状态的“快照”,在这个快照里,文件不会被锁定。

robocopy 本身不直接支持创建 VSS 快照,但你可以通过 diskshadow 脚本来配合。

  1. 创建一个 diskshadow 脚本 (例如 vss_script.txt):

    set context persistent nowriters
    add volume C: alias SystemBackup
    create
    expose %SystemBackup% X:
    • 这个脚本会在 C: 盘上创建一个持久化的 VSS 快照,并把它挂载为 X: 盘。
  2. 创建一个批处理文件 (例如 backup_users.bat) 来执行所有操作:

    @echo off
    REM --- 使用 diskshadow 创建 VSS 快照并挂载到 X: ---
    echo "正在创建 C: 盘的卷影副本..."
    diskshadow /s vss_script.txt > NUL

    REM --- 检查快照是否成功创建 ---
    if not exist X:\ (
    echo "错误:创建卷影副本失败!"
    goto end
    )

    echo "快照已成功挂载到 X: 盘,开始 Robocopy..."

    REM --- 在快照上运行 Robocopy ---
    robocopy "X:\Users" "D:\Backup\Users" /MIR /COPYALL /XJ /R:3 /W:5 /MT:16 /XD AppData /XF "ntuser.dat*" /LOG:D:\Backup\users_backup_log.txt /TEE

    echo "Robocopy 完成。"

    REM --- 使用 diskshadow 删除快照并卸载 X: ---
    echo "正在卸载并删除卷影副本..."
    diskshadow /s - << (echo delete shadows all & echo exit) > NUL

    echo "备份完成!"

    :end
    pause
  3. 以管理员身份运行 backup_users.bat。这个批处理文件会自动完成创建快照 -> 复制 -> 删除快照的全过程。

总结与建议

功能/参数简单复制备份C:\Users (推荐)解释
模式/E/MIR/MIR 用于同步,保持备份整洁。
链接处理/SL/XJ/XJ 必须用来避免 C:\Users 内的无限循环。
权限/COPYALL/COPYALL /B/B (备份模式) 是关键,用于绕过权限和文件锁定问题(离线时)。
环境在线离线 (WinRE)在线+VSS离线最可靠,VSS是次优选择。
排除不用/XD AppData... /XF ntuser.dat*排除临时和缓存数据,极大提高效率和备份质量。

最终建议

为了获得一个真正无损、可靠的 C:\Users 目录备份,强烈推荐使用方案一(离线复制),并采用包含 /MIR, /XJ, /B, /XD 等参数的完整指令。这是系统管理员和IT专业人员的标准操作。

4. 将整个用户目录(C:\Users)重定向到新位置

好的,这是一个非常高级且有风险的操作,但确实可以实现。将整个用户目录(C:\Users)重定向到新位置,意味着你要告诉 Windows 系统:“从现在开始,所有用户的配置文件都去新的位置(如 D:\Users)查找和创建。”

极度重要警告: 这是一个对操作系统核心配置的重大修改。操作不当极有可能导致系统无法启动、用户无法登录、软件运行异常、Windows 更新失败等严重问题。在开始之前,必须、必须、必须创建一个完整的系统镜像备份(使用 Macrium Reflect, AOMEI Backupper, Acronis True Image 或 Windows 自带的系统映像备份功能),以便在出现问题时可以完全恢复!


使用目录联接点 (Junction)(推荐给已安装系统)

这种方法风险相对较低,因为它不修改核心注册表。它只是把 C:\Users 这个路径“欺骗”成一个指向 D:\Users 的快捷方式。

  1. 在 WinRE 命令提示符中操作

  2. 重命名旧的 Users 文件夹:

    • 这是为了释放 C:\Users 这个名字。
    ren C:\Users C:\Users.old
  3. 创建 Junction:

    • 使用 mklink 命令创建一个从 C:\Users 指向 D:\Users 的 Junction。
    mklink /J C:\Users D:\Users
    • /J 表示创建的是目录联接点 (Directory Junction),它对于系统来说比普通快捷方式更透明。
    • 如果成功,你会看到 Junction created for C:\Users <<===>> D:\Users
  4. 重启系统:

    • 关闭命令提示符,选择“继续”或“退出并继续到 Windows”。

5. Windows 11在更新重启时卡住超过20分钟

Windows 11在更新重启时卡住超过20分钟,确实是一个比较棘手的问题,但这通常是可以解决的。这可能由多种原因引起,例如更新文件过大、软件冲突、系统文件损坏或驱动程序问题。

您可以按照从易到难的顺序尝试以下几种方法来解决此问题:

第一步:耐心等待与强制重启

  • 耐心等待:某些大型功能更新可能需要比预期更长的时间。如果您的硬盘指示灯仍在闪烁,表明系统仍在进行读写操作,建议再等待一段时间。
  • 强制重启:如果长时间没有任何反应,您可以尝试强制重启。
    1. 长按电源按钮,直到电脑完全关机。
    2. 等待大约30秒后,再重新按下电源按钮开机。
    3. 很多情况下,系统会在重启后继续完成更新过程或自动回滚失败的更新。

第二步:使用Windows内置工具进行修复

如果强制重启后问题依旧,或者电脑无法正常进入系统,您可以尝试以下方法:

  • 启动修复:多次强制重启(通常是3次)后,Windows会自动进入“高级启动选项”菜单。

    1. 在此菜单中,选择“疑难解答” > “高级选项” > “启动修复”。
    2. 系统将自动诊断并尝试修复妨碍Windows加载的问题。
  • 进入安全模式:在安全模式下,系统仅加载最基本的服务和驱动程序,便于排查问题。

    1. 同样通过多次强制重启进入“高级启动选项”,然后选择“疑难解答” > “高级选项” > “启动设置” > “重启”。
    2. 电脑重启后,按“4”或“F4”键进入安全模式。
    3. 在安全模式下,您可以尝试卸载最近的更新或回滚驱动程序。
  • 运行Windows更新疑难解答:如果能进入系统(无论是正常模式还是安全模式),可以运行此工具。

    1. 按下 Windows键 + I 打开设置,前往“系统” > “疑难解答” > “其他疑难解答”。
    2. 找到“Windows更新”,然后点击“运行”按钮。

第三步:使用命令行工具修复系统文件

对于更深层次的系统文件损坏,可以尝试使用命令行工具。

  1. 在搜索栏中输入“cmd”或“命令提示符”,右键点击并选择“以管理员身份运行”。
  2. 输入 sfc /scannow 命令并按回车。这个命令会扫描并修复受保护的系统文件。
  3. 扫描完成后,再输入 DISM /Online /Cleanup-Image /RestoreHealth 并按回车。这个命令会修复Windows系统映像。
  4. 完成后重启电脑,再次尝试更新。

第四步:清理更新缓存

损坏的更新缓存文件也可能导致更新卡住。

  1. 以管理员身份打开命令提示符。
  2. 依次输入并执行以下命令,停止相关服务:
    • net stop wuauserv
    • net stop bits
  3. 然后,重命名SoftwareDistribution文件夹,该文件夹存储了更新文件。
  4. 最后,重新启动刚才停止的服务:
    • net start wuauserv
    • net start bits
  5. 重启电脑后,Windows会重新创建更新文件夹并下载更新。

如果以上方法均无效,最后的选择可能是使用“系统还原”将电脑恢复到更新前的状态,或者“重置此电脑”。