目录权限
NTFS权限:文件夹属性中的安全选项卡中对应的ACL;可以通过xcopy方法/RoboCopy和fsmgmt迁移工具以及ntbackup工具/Windows Server Backup工具等进行迁移。
也可以使用第三方工具fastcopy/teracopy等也都是极好用的工具。
SHARE权限:permcopy是将文件夹的共享权限拷贝给目标文件夹。
目录权限的基本规则:
当您使用 Windows Explorer 复制或移动文件和文件夹时,在这些文件或文件夹上设置的权限可能会发生改变。
例如,当您在一个 NTFS 文件系统卷内或在两个 NTFS 卷之间复制一个文件时,Windows 将把它当作一个新文件。作为一个新文件,它将具有目标文件夹的权限,您将成为“创建者/所有者”。
可以使用Xcopy 命令/robocopy命令等结合自身的参数复制文件并保留已明确应用于这些文件的现有权限。
注意:记得之前xcopy在执行过程中占用内存到4G后就会出现进程卡死的问题;不知道现在是什么情况;我再测试的时候数据没有这么大,没有出现卡死的情况。
目录迁移-带权限
xcopy语法
xcopy \\192.168.1.100\testdir D:\testdir /O /X /E /H /K
或者
xcopy \\192.168.1.100\testdir \\192.168.1.200\testdir /O /X /E /H /K
#源目录下的所有内容(文件/目录/快捷方式)全部都会原样复制过去
这些开关具有下列作用: /E - 复制文件夹和子文件夹,包括空文件夹。 /H - 还复制隐藏文件和系统文件。 /K - 复制属性。一般情况下,Xcopy 将重置只读属性。 /O - 复制文件所有权和 ACL 信息。 /X - 复制文件审核设置(暗含 /O)。
注意:此操作过程不会覆盖继承的权限。使用带 /O /X /E /H /K 开关的 Xcopy 命令复制文件时,将应用下面的继承权限:
- 直接分配到文件和文件夹的安全设置将被保留。
- 从源父文件夹中继承的安全设置将丢失。
- 目标文件夹的安全设置将被继承。
- 当您将文件或文件夹移动到 FAT 卷时,这些文件夹和文件将丢失它们的 NTFS 权限,因为 FAT 卷不支持 NTFS 权限。
其他可能有用的参数:
/C: 可选: 即使有错误,也继续复制
/Y:不用提示你输入YES
/B: 复制符号链接和连接本身
/J: 可选,如果确认文件里面是大文件就用这个
RoboCopy语法
ROBOCOPY一个老工具了,属于XCOPY加强版,支持多线程,断点传,支持权限复制,支持限定层次拷贝(例如:你想拷贝n层,n层之下的子文件夹不拷贝,或者想复制一定层数的结构)
ROBOCOPY也提供差异同步的功能(默认是增量;例如原文件被删除了,在目标中这个删除的文件是不会被同步删除的;这点要注意,但我们可以通过参数/MIR开关控制);因此使用ROBOCOPY进行大量数据迁移时可以考虑分2个阶段:
- 复制阶段
- 同步差异阶段
用法 :
ROBOCOPY source destination [file [file]...] [options]
源 :: 源目录(驱动器:\路径或\\服务器\共享\路径)。
目标 :: 目标目录(驱动器:\路径或\\服务器\共享\路径)。
文件 :: 要复制的文件(名称/通配符: 默认为 "*.*")。
注意:源目录或者目标目录若名字带空格,全部加“” ,例子: “//192.168.1.100/temp share”
参数 | 描述 |
| 指定源目录的路径。 |
| 指定目标目录的路径。 |
| 指定要复制的一个或多个文件。 支持通配符(* 或 ?)。 如果未指定此参数, |
| 指定要与 robocopy 命令结合使用的选项,包括复制、文件、重试、日志记录和作业选项。 |
例子1-复制:
这个一般用来完成首次复制。
robocopy \\192.168.11.100\share01 D:\DistDir /E /ZB /COPYALL /MT:64 /LOG+:xml_log_20230612.txt /R:5 /W:5
参数:
/E : 文件夹、子文件夹、空文件夹
/ZB: 这里是核心
/Z:在可重新启动模式下,断点续传,复制的时候建议采用,实际上它会拖慢速度,大家自行考虑加不加。
/B:官方的解释如下
- / Z :: 在可重新启动模式下复制文件。
- /B :: 在备份模式下复制文件。
- /ZB :: 使用可重新启动模式;如果拒绝访问,请使用备份模式。
重要:如果你不加这个/B,带域名用户和OU的NTFS权限根本没有转移过来!!这个我测试了N遍,这个/B,是robocopy真正核心的的命令。就算你后面的是 /copyall,没有这个/B,域权限根本过不来。
/COPYALL : 复制权限的核心命令。
官方解释:/COPY:复制标记:: 要复制的文件内容(默认为 /COPY:DAT)。 (复制标记: D=数据,A=属性,T=时间戳)。 (S=安全=NTFS ACL,O=所有者信息,U=审核信息)。 /SEC :: 复制具有安全性的文件(等同于 /COPY:DATS)。 /COPYALL :: 复制所有文件信息(等同于 /COPY:DATSOU)。 /NOCOPY :: 不复制任何文件信息(与 /PURGE 一起使用)。
总之复制的时候就是完全复制就好了 /COPYALL
/MT:64 默认好像8线程,最大不超过128;好像没什么用。
/LOG:xml_log_20230612.txt 此处建议,每一个文件夹用一个日志名,这个文件日志在哪里?拷贝完有提示,很明显。
作用:不会在你的命令提示行符输出执行结果,而是存储到一个指定的日志文件里面去,看上去像程序卡了,对于大的文件夹,文件扫描目录也会花很多时间。
/LOG+:代表追加的意思,如果日志文件已经存在则会将新的日志附加到现有日志中。
日志文件内容:
/R:5 /W:5 指定失败时的重试次数和等待重试的间隔时间。
/r:指定复制失败时的重试次数。 n 的默认值为 1,000,000(100 万次重试)。
/w:指定等待重试的间隔时间,以秒为单位。 n 的默认值为 30(等待 30 秒)。
例子2-同步
robocopy \\192.168.1.10\share01 D:\DistDir /E /ZB /COPYALL /MT:64 /LOG+:xml_log_20230613.txt /R:5 /W:5 /MIR
/MIR:这个是完全同步,因为ROBOCOPY是增量的,所以在复制的过程中,如果用户有删除文件,需要保证和旧的服务器完全一样,所以要加/MIR保证两边完全一致。
加或不加/MIR只会影响源目录中被删除的文件会不会在目标目录同步删除;其他都一样。
其他:
RoboCopy设计了非常复杂的参数选项,有特殊需求的朋友可以直接参考官网对参数的说明:
https://learn.microsoft.com/zh-cn/windows-server/administration/windows-commands/robocopy
Permcopy语法
对于有安全权限的共享文件夹的迁移,可以用Xcopy或Robocopy等工具复制到目标机器上后,再用Permcopy.exe把SHARE权限复制过去.Permcopy在resource kit的工具光盘中有.
1)可以首先利用Xcopy或其他方法把该共享文件(包括所有内容)拷贝至目标机器
2)在目标机器上,共享拷贝过来的文件夹。
3)利用permcopy 把共享权限设置拷贝过去:
Permcopy \\源机器名 共享文件夹名 \\目标机器名 共享文件夹名
同服务器共享文件夹位置的修改
实际上Windows的共享文件夹设定是保存在注册表中的,我们在同文件服务器迁移和不同文件服务器间迁移时可以利用这一点完成共享目录设定的迁移。
注册表位置:
计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Shares
把path修改为目标路径就可以了。
然后重启下服务器(或者重启下server服务也是一样的),可以看到共享就转移到我们新设定的位置了;并且share权限也是过来的。