无vCenter克隆

备注好需要克隆的

我一般以ip备注好

image-20240805100424795

查看虚拟机路径

image-20240805101046940

复制文件

复制前关闭虚拟机,创建一个新的目录,选择.vmx文件和.vmdk文件,然后复制到刚才创建的文件夹

image-20240805101412939

列出的每个文件的解释:

虚拟机磁盘文件

  1. new_base-flat.vmdk

    • 作用: 这是虚拟磁盘数据文件,包含虚拟机的实际数据。此文件存储虚拟机磁盘的全部内容,比如操作系统、应用程序和文件。由于它代表了虚拟机的完整磁盘空间,通常会很大。
  2. new_base.vmdk

    • 作用: 这是 new_base-flat.vmdk 的描述文件,包含关于虚拟磁盘的元数据,如大小、格式和数据布局。它是一个文本文件,为 ESXi 提供访问 flat 文件所需的信息。

虚拟机配置文件

  1. new_base.vmx

    • 作用: 这是虚拟机的主要配置文件,包含所有的设置和参数,如内存大小、CPU 配置、网络设置和设备信息。该文件对于启动和管理虚拟机至关重要。
  2. new_base.nvram

    • 作用: 这个文件存储了虚拟机 BIOS 的状态,包含启动顺序、硬件配置和其他类似物理计算机非易失性内存的设置。
  3. new_base.vmsd

    • 作用: 此文件用于存储虚拟机快照的元数据和信息,记录快照的详细信息,是管理虚拟机快照操作的重要文件。

日志文件

  1. vmware.log

    • 作用: 这是虚拟机的当前日志文件,记录与虚拟机操作相关的最近事件和活动,用于故障排除和监控虚拟机。
  2. vmware-1.log, vmware-2.log, vmware-3.log

    • 作用: 这些是归档的日志文件。ESXi 轮换日志文件,将旧的日志重命名为递增的数字。它们存储虚拟机的旧事件和活动记录,可用于分析过去的问题或性能。

注册虚拟机

复制完成后,在复制后的文件夹,右键vmx 文件,注册虚拟机

image-20240805101658125

注册完成,在虚拟机下搜索你刚刚要备注的的虚拟机,发现有两台, 启动其中一台 修改ip 地址和mac 地址即可
我复制了centos7 发现mac 地址不用修改,使用ip link 对比是不同的

修改名称

image-20240809163433730

复制脚文件夹脚本

支持exsi6.7系统, win10测试也行

复制文件夹下指定后缀格式的文件到目标文件.脚本包含日志,pid打印,

执行方式

1
2
3
4
nohup /opt/copy_specific_files.sh $
tail -f nohup.out
或者
nohup /opt/copy_specific_files.sh > log.log 2>&1 &

copy_specific_files.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#!/bin/sh

# 配置变量
SOURCE_FOLDER="." # 要复制的文件夹路径(相对路径)
SOURCE_FOLDER_NAME="aa" # 要复制的文件夹名称
SOURCE_DIR="$SOURCE_FOLDER/$SOURCE_FOLDER_NAME" # 原始文件夹路径(相对路径)
DEST_BASE_DIR="." # 目标文件夹基础路径(相对路径)

#SOURCE_FOLDER="/vmfs/volumes/5ddb5db2-c7d661f2-1c0f-14187750f218" # 要复制的文件夹路径(绝对路径)
#SOURCE_FOLDER_NAME="new_base" # 要复制的文件夹路径下的文件夹名称
#SOURCE_DIR="$SOURCE_FOLDER/$SOURCE_FOLDER_NAME" # 原始文件夹路径(绝对路径)
#DEST_BASE_DIR="/vmfs/volumes/5ddb5db2-c7d661f2-1c0f-14187750f218" # 目标文件夹基础路径(绝对路径)

TOTAL_COPIES=4 # 总共需要的副本数量
CONCURRENT_COPIES=2 # 并发复制的数量
FILE_EXTENSIONS="vmx vmdk" # 需要复制的文件扩展名列表

# 记录日志信息
log_message() {
log_file="$1"
message="$2"
timestamp=$(date "+%Y-%m-%d %H:%M:%S")
echo "$timestamp: $message" >> "$log_file"
echo "$timestamp: $message"
}

# 检查目录是否存在
check_directory_exists() {
dir="$1"
log_file="$2"
if [ ! -d "$dir" ]; then
log_message "$log_file" "Directory $dir does not exist."
exit 1
fi
}

# 生成目标目录名
generate_dest_dir_name() {
base_dir="$1"
folder_name="$2"
copy_number="$3"
echo "$base_dir/${folder_name}_copy_$copy_number"
}

# 复制文件夹中特定扩展名的文件
copy_specific_files() {
source_dir="$1"
dest_dir="$2"
extensions="$3"
log_file="$4"

# 创建目标文件夹
mkdir -p "$dest_dir"
log_message "$log_file" "Created directory $dest_dir"

# 遍历所有扩展名并复制匹配的文件
for ext in $extensions; do
find "$source_dir" -maxdepth 1 -type f -name "*.$ext" | while read file; do
if [ -f "$file" ]; then
dest_file="$dest_dir/$(basename "$file")"
if [ ! -f "$dest_file" ]; then
cp "$file" "$dest_file"
log_message "$log_file" "Copied $file to $dest_file"
else
log_message "$log_file" "Skipped $file as $dest_file already exists"
fi
fi
done
done

log_message "$log_file" "Completed copying files from $source_dir to $dest_dir"
}

# 执行复制任务
execute_copy_tasks() {
source_dir="$1"
base_dest_dir="$2"
folder_name="$3"
total_copies="$4"
concurrent_copies="$5"
extensions="$6"

i=1
while [ $i -le "$total_copies" ]; do
j=0
while [ $j -lt "$concurrent_copies" ] && [ $((i + j)) -le "$total_copies" ]; do
copy_number=$((i + j))
dest_dir=$(generate_dest_dir_name "$base_dest_dir" "$folder_name" "$copy_number")
log_file="copy_log_${folder_name}_copy_${copy_number}.log"
log_message "$log_file" "Starting copy to $dest_dir"
check_directory_exists "$source_dir" "$log_file"
copy_specific_files "$source_dir" "$dest_dir" "$extensions" "$log_file" &
j=$((j + 1))
done

# 等待当前批次的复制进程完成
wait

# 增加步长
i=$((i + concurrent_copies))
done
}

# 主程序入口
main() {
script_pid=$$
log_message "general_log.log" "Script started with PID $script_pid"
check_directory_exists "$SOURCE_DIR" "general_log.log"
check_directory_exists "$DEST_BASE_DIR" "general_log.log"
execute_copy_tasks "$SOURCE_DIR" "$DEST_BASE_DIR" "$SOURCE_FOLDER_NAME" "$TOTAL_COPIES" "$CONCURRENT_COPIES" "$FILE_EXTENSIONS"
log_message "general_log.log" "All copies completed."
}

# 运行主程序
main


修改ip

1
vi /etc/netplan/00-installer-config.yaml 

重启生效

1
netplan apply

设置hostname

查看

1
hostnamectl

设置

通过命令hostnamectl 来修改。此种方式既可以修改/etc/hostname文件,又可以立即生效

1
hostnamectl set-hostname epm

或者

  1. 修改hostname
1
2
sudo vi /etc/hostname
sudo vi /etc/hosts
  1. 让其立即生效
1
sudo hostname -F /etc/hostname
1
rm -rf .bash_history
1
history -c