APG40克隆部署用户指南(基于WinS2003)

需积分: 1 0 下载量 185 浏览量 更新于2024-09-13 收藏 261KB PDF 举报
"用户指南 - 克隆部署,基于WinS2003的APG40 C/4系统" 本文档是针对APG40基于Windows Server 2003 (WinS2003) 系统克隆部署的用户指南。主要目标是为用户提供处理APG40克隆过程的详细步骤。它适用于新APG40系统的安装,但不作为任何恢复或还原操作的替代方案。请注意,文档中特别提到了关于许可证的信息,并涵盖了APG40 C/4硬件的克隆配置。 1. **许可证(LICENSE)** 在使用此克隆应用之前,用户必须阅读第2章“许可证”中的信息。这可能涉及到软件使用权限、授权规定以及可能的限制条件,确保合法合规地进行克隆操作。 2. **已知错误和限制(KNOWN BUGS AND LIMITATIONS)** 文档中可能列出了在克隆过程中可能出现的问题和已知限制。这些信息有助于用户预先了解可能出现的故障点,以便于在实际操作时能及时解决或规避。 3. **先决条件(PREREQUISITES)** 在开始克隆之前,用户需要满足一定的前提条件。这可能包括但不限于系统硬件配置、软件版本要求、系统状态(如是否已完全更新)、网络设置等,确保克隆操作的顺利进行。 4. **将克隆镜像放入APG40系统(TO PUT A CLONE IMAGE INTO AN APG40)** 这一章节详细描述了克隆过程的各个步骤: - **预克隆操作**(Precloning actions):在开始克隆前需要进行的准备工作,如备份现有数据、关闭不必要的服务等。 - **服务器克隆准备**(Prepare the server for cloning):确保服务器环境适合克隆,可能包括系统清理、设置共享文件等。 - **APG40的多克隆**(Multicloning of APG40):如果需要同时克隆多个APG40设备,这一部分将指导如何有效地执行批量克隆操作。 - **APG40目标设备的准备**(Preparation of APG40 targets):对目标设备进行必要的设置,使其能够接收并处理克隆图像。 - **启动Ghost Multicasting到APG40目标**(Start Ghost Multicasting to the APG40 targets):使用Ghost工具进行多播克隆,高效地将源系统镜像分发到多个目标设备。 - **Sysprep安装克隆**(Clone Sysprep Installation):Sysprep是一个Windows工具,用于在克隆后定制和准备新的系统实例,确保每个克隆实例的独特性和系统激活。 5. **克隆后配置APG40系统(CONFIGURE THE APG40 AFTER CLONING)** 克隆完成后,可能需要进一步配置APG40系统,以适应新的环境和需求。这可能涉及设置网络、安全策略、用户账户、应用程序安装以及其他系统特定的配置调整。 这份用户指南为APG40系统基于WinS2003的克隆部署提供了全面的操作流程,旨在帮助用户高效、正确地完成克隆任务,同时避免潜在问题。在执行克隆操作前,用户应仔细阅读并理解文档中的所有内容,确保遵循最佳实践和建议。

#ifndef CONFIG_HAVE_COPY_THREAD_TLS /* For compatibility with architectures that call do_fork directly rather than * using the syscall entry points below. */ long do_fork(unsigned long clone_flags, unsigned long stack_start, unsigned long stack_size, int __user *parent_tidptr, int __user *child_tidptr) { struct kernel_clone_args args = { .flags = (clone_flags & ~CSIGNAL), .pidfd = parent_tidptr, .child_tid = child_tidptr, .parent_tid = parent_tidptr, .exit_signal = (clone_flags & CSIGNAL), .stack = stack_start, .stack_size = stack_size, }; if (!legacy_clone_args_valid(&args)) //1.查找 pid 位图,为子进程分配新的 pid return -EINVAL; return _do_fork(&args); } long _do_fork(struct kernel_clone_args *args) { u64 clone_flags = args->flags; struct completion vfork; struct pid *pid; struct task_struct *p; int trace = 0; long nr; //2.关于进程追踪的设置 if (!(clone_flags & CLONE_UNTRACED)) { if (clone_flags & CLONE_VFORK) trace = PTRACE_EVENT_VFORK; else if (args->exit_signal != SIGCHLD) trace = PTRACE_EVENT_CLONE; else trace = PTRACE_EVENT_FORK; if (likely(!ptrace_event_enabled(current, trace))) trace = 0; } //3.复制进程描述符 p = copy_process(NULL, trace, NUMA_NO_NODE, args); add_latent_entropy(); if (IS_ERR(p)) return PTR_ERR(p); trace_sched_process_fork(current, p); pid = get_task_pid(p, PIDTYPE_PID); nr = pid_vnr(pid); if (clone_flags & CLONE_PARENT_SETTID) put_user(nr, args->parent_tid); if (clone_flags & CLONE_VFORK) { p->vfork_done = &vfork; init_completion(&vfork); get_task_struct(p); } //4.将子进程放在运行队列中父进程的前面 wake_up_new_task(p); /* forking complete and child started to run, tell ptracer */ if (unlikely(trace)) ptrace_event_pid(trace, pid); if (clone_flags & CLONE_VFORK) { //5.如果是 vfork() 的话父进程插入等待队列,挂起父进程直到子进程释放自己的内存地址空间 //(直到子进程结束或者执行新的程序) if (!wait_for_vfork_done(p, &vfork)) ptrace_event_pid(PTRACE_EVENT_VFORK_DONE, pid); } put_pid(pid); return nr; }加上注释

2023-06-11 上传