在 Java 中,可以创建一个随机UUID:
UUID uuid = UUID.randomUUID();
Run Code Online (Sandbox Code Playgroud)
如何在 Bash 中做到这一点?
我已将实时系统中的硬盘驱动器(使用 dd)克隆到多个备份硬盘驱动器上。实时系统中的根分区是一个 LVM 卷。备份副本旨在替代原始副本,这意味着它们需要与主副本具有相同的 UUID。
快速提问:是否可以在实时系统上安装备份 HD 之一?当我尝试这样做时,由于相同的 UUID 和卷组名称,LVM 对此感到困惑是可以理解的。按照 [this answer][1] 中的提示首先重命名原始 LVM 组,我尝试过:
将外部备份 HD 连接到 USB 端口
正在运行(请注意,字符串“test”是此系统上的组名)
Run Code Online (Sandbox Code Playgroud)# vgrename test test-live Volume group "test" successfully renamed to "test-live" vgscan --mknodes Reading all physical volumes. This may take a while... Found duplicate PV qWUadGaM2MU1UAJ5Spp8upD6fbddk7Zb: using /dev/dm-3 not /dev/dm-0 Found volume group "test" using metadata type lvm2 # vgchange -ay Found duplicate PV qWUadGaM2MU1UAJ5Spp8upD6fbddk7Zb: using /dev/dm-3 not /dev/dm-0 2 logical volume(s) in volume group "test" now active …
UUID 究竟存储在磁盘的哪个部分?MBR?分区内的某个地方?是计算值,还是随机生成记录?
如果您在 GNU/Linux 系统上实现了任何类型的块设备加密,那么也应该加密您的交换分区,因为任何解密的数据都可能随时以明文形式写入交换分区。
查看“crypttab”的 debian 手册页,我看到了一个在启动时创建随机键控交换分区的示例,因此在启动过程中密钥是随机设置的,并且只有系统本身知道:
# Encrypted swap device
cswap /dev/sda6 /dev/urandom cipher=aes-cbc-essiv:sha256,hash=ripemd160,size=256,swap
Run Code Online (Sandbox Code Playgroud)
在此示例中,交换设备由常规开发路径引用,即 /dev/sda6
例如,如果插入了 USB 驱动器,则绝对设备路径可能会更改并在启动时重新分配。如果/dev/sda6碰巧是与预期不同的分区并且随后被随机交换数据覆盖,用户会非常不高兴!!
所以解决方案似乎是:使用 UUID 而不是设备路径(因为 UUID 不应该改变),替换/dev/sda6为/dev/disk/by-uuid/<whatever the uuid of dev/sda6 is>
但是……问题来了:每次 cryptsetup 在启动时重新创建加密的交换分区时,它都会为它生成一个新的 UUID!哦!
所以我们需要以某种方式保留这个加密文件系统的 UUID。我认为 cryptsetup 可以通过它的--offset开关来做到这一点,允许保留 LUKS 标头,从而保留 UUID。
我找到了这个网址:https : //wiki.archlinux.org/index.php/System_Encryption_with_LUKS#Using_UUIDs_with_encrypted_swap_partitions
有谁知道如何在 Debian 操作系统上实现为 Arch Linux 描述的解决方案?文档中提到的 init 脚本在 Debian 操作系统上似乎不存在
谢谢!
编辑
可以使用ecryptfs使用以下命令实现相同的目的(加密交换空间):
ecryptfs-setup-swap
没有困扰块设备加密的问题。看看这个 AskUbuntu 查询
如何更改 VHD 文件的 UUID?
我的问题是 VirtualBox 不会接受已经添加的 VHD 文件。但是我正在工作/家庭之间移动 VHD 磁盘并“随机”克隆它们(并将它们保留为 VHD,而不是 VDI)。
导出/导入功能对我不起作用,因为 1) 它将文件更改为 VDI 和 2) 花费的时间太长了,我每天早上/下午切换位置时都等不及它导出+导入 60GB 磁盘.
将其保留为 VHD 以使其与 HyperV 兼容非常重要。
我是 ubuntu linux 的初学者,我需要编写简单的 bash 脚本,该脚本可以使用该分区的 uuid识别必要的闪存驱动器(仅包含一个vfat分区),并获取该闪存驱动器的挂载点。/etc/fstab文件不包含此驱动器的 mountig 规则。例如,让分区 uuid 为 7DCD-9380 使用 readlink 工具我可以在/dev目录中获取设备链接:
teddy@st1:~$ readlink -f /dev/disk/by-uuid/7DCD-9380
/dev/sdc1
Run Code Online (Sandbox Code Playgroud)
但是我如何获得/dev/sdc1设备的挂载点?
我有一些虚拟机,它们是相同原始磁盘映像的克隆,其中包含一些 LVM 卷。当我克隆这些时,我最终会得到多个 LVM 卷(尽管在不同的主机上),它们具有相同的“唯一”ID。有什么办法可以让 LVM 更改现有卷的 UUID?
我需要能够识别某些 ESX 服务器属于哪个集群或 vCenter 实例,但需要直接从 ESX 服务器本身获取此信息。此信息在主机系统上的 vSphere API 中是否可用?
背景: 我想为由多个 vCenter 管理的大型资产中的每个虚拟机分配一个唯一标识符,但 VMware 不明白 UUID 中的 UU 代表什么 - 当您复制虚拟机时,它们的“通用唯一”标识符可能会重复。instanceUuid 属性更好,但仅在管理 vCenter 实例的范围内是唯一的。要创建唯一标识,我需要 vCenter 的 ID 以及 ESX 或 VM ID。
还有谁知道如果 ESX 主机不是由 vCenter 管理的,instanceUuid 会发生什么情况 - 它是否仍然设置?如果将独立 ESX 添加到 vCenter 会发生什么 - 它是否会更改主机和所有来宾的 instanceUuid?官方文档对此事保持沉默。instanceUuid 可以作为一个稳定的身份来依赖吗?
我的服务器上有以下 NFS 导出,并fsid设置为新生成的 UUID。
/etc/出口:
/mnt/data client(ro,fsid=b07f5af6-6b10-11e3-b4c1-00248115724d)
Run Code Online (Sandbox Code Playgroud)
然后我会运行exportfs -rav它没有返回任何错误,但我不知道如何在客户端上安装它。
如果fsid设置为0或root我可以按如下方式挂载:
# mount server:/ /mnt/Media
Run Code Online (Sandbox Code Playgroud)
如何在 mount 命令或 /etc/fstab 文件中引用 UUID?
以下不起作用:
server:$uuid
server:/$uuid
server:UUID=$uuid
server:/UUID=$uuid
Run Code Online (Sandbox Code Playgroud)
因错误而失败: mount.nfs: Operation not permitted
我正在尝试在服务器上克隆一个 LUN 并将其呈现给同一台服务器,但遇到了 UUID 奇怪的问题。我不在 LUN 上创建分区,只创建一个 PV,然后在其上创建 LVM,这样我就可以根据需要在线扩展它。克隆的 LUN 与 LVM 和 PV 的源 LUN 具有相同的 UUID,这是意料之中的。我使用 vgimportclone 更改了 PV 的 UUID,然后使用 tune2fs 更改了 LVM 的 UUID,这些都没有问题。我遇到的是物理磁盘的 UUID,它应该具有与 PV 相同的 UUID,直到我重新启动服务器才会更新。为了加深这个谜团,如果我在底层磁盘的 LUN 上运行 blkid,它会显示旧的 UUID,但如果我在这些相同的磁盘上运行 udevadm,则没有 UUID。
所以我有2个问题。
1) 有人知道 whey blkid 和 udevadm 会显示不同的信息吗?
2)有没有办法在不重启的情况下刷新物理磁盘的UUID?
服务器:RHEL 6.5 device-mapper-multipath-0.4.9-87.el6.x86_64 lvm2-2.02.143-7.el6.x86_64
谢谢,黑暗面