我在运行 linux 的 aws 上有一个 ec2 实例,有一个根卷和另一个数据卷。两者都是ext4。我需要将数据卷大小增加到 2 TB 以上。但是目前分区方案是 mbr,所以我无法创建这样的分区。我发现 gpt 允许超过 2 TB 的分区。但是大多数谷歌搜索结果都不是很清楚同一服务器是否可以有 1 个磁盘(根)与 mbr 和另一个非根磁盘作为 gpt。
这在生产中是否可行且安全?有人做过这样的设置吗?
提前致谢。
我在运行 linux 的 aws 上有一个 ec2 实例,有一个根卷和另一个数据卷。两者都是ext4。我需要将数据卷大小增加到 2 TB 以上。但是目前分区方案是 mbr,所以我无法创建这样的分区。我发现 gpt 允许超过 2 TB 的分区。但是大多数谷歌搜索结果都不是很清楚同一服务器是否可以有 1 个磁盘(根)与 mbr 和另一个非根磁盘作为 gpt。
这在生产中是否可行且安全?有人做过这样的设置吗?
提前致谢。
我正在使用 EC2 映像生成器来自动化为 mongoDB 服务器创建 AMI 映像的过程。
此图像有两卷:
/data
- 100 GB/logs
- 10 GB为了实现这个设置,我创建了一个附加了 3 个卷的图像构建器配方(一个用于 root /
)。
然后,映像生成器组件格式化并安装卷。以下是执行此操作的步骤片段:
- name: FormatAndMountDataVolume
action: ExecuteBash
inputs:
commands:
- sudo mkdir /data
- sudo mkfs -t xfs /dev/nvme1n1
- echo "/dev/nvme1n1 /data xfs defaults,nofail 0 2" | sudo tee -a /etc/fstab
- sudo mount -a
- sudo chown -R mongodb:mongodb /data
- name: FormatAndMountLogsVolume
action: ExecuteBash
inputs:
commands:
- sudo mkdir /logs
- sudo mkfs -t xfs /dev/nvme2n1
- echo "/dev/nvme2n1 /logs xfs defaults,nofail 0 2" | sudo tee -a /etc/fstab
- sudo mount -a
- sudo chown -R mongodb:mongodb /logs
它工作正常并创建了图像。问题是这些实例使用 Nitro-System,它们的文档说明如下:
设备名称为 /dev/nvme0n1、/dev/nvme1n1 等。您在块设备映射中指定的设备名称使用 NVMe 设备名称 (/dev/nvme[0-26]n1) 重命名。块设备驱动程序可以按照与您为块设备映射中的卷指定的顺序不同的顺序分配 NVMe 设备名称。
因此,上述 AMI 存在潜在问题。它将目录挂载到/data
设备/dev/nvme1n1
和/logs
on 上/dev/nvme2n1
,但亚马逊不保证设备将使用此顺序命名。该实例可能最终拥有一个/logs
容量为 100GB 的文件夹,而/data
只有 10GB。
关于在为此 AMI 运行 EC2 实例时如何确保将卷安装在正确文件夹上的任何想法?
我在 PowerShell 中编写了一个创建 aws ebs 快照的脚本,它工作正常,没有问题,除了我无法定期获取进度状态以继续脚本中的下一步。除非我没有更新该快照 100% 完成,否则我无法继续我的脚本中的下一步,即升级应用程序。任何帮助表示赞赏。
Import-Module -name AWSPowerShell
$CostIdValue = Read-Host "Please provide ID , e.g.:- 111"
$CostId = Get-EC2Volume -profilename xyz -region us-east-2 | ? { $_.Tags.Count -gt 0 -and $_.Tags.Key -eq "CostId" -and $_.Tags.Value -eq $CostIdValue} | Select-Object -ExpandProperty VolumeId
$snapshot = New-EC2Snapshot -profilename xyz -region us-east-2 -VolumeId $CostId
#$snapshotId = Get-EC2Volume -profilename xyz -region us-east-2 | ? { $_.Tags.Count -gt 0 -and $_.Tags.Key -eq "CostId" -and $_.Tags.Value -eq $CostIdValue} | Select-Object -ExpandProperty SnapshotId
$a = $snapshot.SnapshotId
#Write-Output $a
New-EC2Tag -profilename xyz -region us-east-2 -Resource $a -Tag @{ Key="CostId"; Value = $CostIdValue }
$i = Get-EC2Snapshot -profilename xyz -region us-east-2 | ? { $_.Tags.Count -gt 0 -and $_.Tags.Key -eq "CostId" -and $_.Tags.Value -eq "$CostIdValue"} | Select-Object -ExpandProperty State
for ($i = 1; $i -le 100; $i++ )
{
Write-Progress -Activity "Search in Progress" -Status "$i% Complete:" -PercentComplete $i;
}
在 AWS 备份和恢复指南 [1] 中,Amazon Data Lifecycle Manager 被列为自动创建、保留和删除快照的工具。但是,在第 15 页,该指南还提到,在拍摄快照之前应该停止根设备(以确保在快照过程中没有缓存数据或未处理的事务不会被捕获)。考虑到这一点,我试图弄清楚以下几点:
Amazon Data Lifecycle Manager 是否会在拍摄快照之前停止实例?如果不是,它是备份根驱动器的推荐方法吗?我有一个自定义 Lambda 脚本,它在拍摄快照之前暂停实例。这是备份根驱动器的推荐方法吗?
[1] https://docs.aws.amazon.com/prescriptive-guidance/latest/backup-recovery/backup-recovery.pdf
我在一些 t3a nano 上为客户端提供了一些非常小的邮件服务器(大多数总容量不到 20 GB)。我以每月每 GB 10 美分的价格购买 gp2 驱动器。我知道我应该将这些降级到每 GB gp3 至少 8 美分。但是其他产品呢?我对存储与吞吐量和 IOPS 感到困惑。我不知道哪种卷类型最适合非常低容量的服务器。
我有两个运行 Ubuntu 18.04 的 ec2 实例。我创建了一个预置 IOPS SSD (io1) 卷并启用了多重连接。我已经成功地在两个实例上安装了该卷,并且可以毫无问题地对其进行读写。现在的问题是,如果我从实例 A 修改共享卷上的文件,如果不重新挂载该卷,我将看不到实例 B 上的更改。有没有办法让这些更新在两个实例上立即可见?
我在 AWS 上有一个带有大量 25GB 文件(1000 个)的 EBS(弹性块存储)。我想为每个文件计算一个 SHA256 和。
哪个 EC2 实例最适合此类任务(cpu 优化?许多内核?存储优化?)。我可以以某种方式并行散列文件吗?如何优化性能?
我的文件系统上有一个 not-quite-folder not-quite-file。它是一个运行 Ubuntu 18.04.4 LTS 的 AWS EC2 实例。
我有一个每晚运行的脚本,它使用 Robo 拾取文件 (/ebsvol/dead-drop/sync) 并将其移动到 (/ebsvol/dead-drop/sync),而 Robo 又使用 Symfony 的 Filesystem rename() 方法(https://symfony.com/doc/current/components/filesystem.html#rename)。
const CANARY_PATH = '/ebsvol/dead-drop/sync';
const CANARY_WORKING_PATH = '/ebsvol/dead-drop/~sync';
...
$this->taskFilesystemStack()
->rename(self::CANARY_PATH, self::CANARY_WORKING_PATH)
->run();
脚本或这段代码出了点问题,但这并不是我来这里的真正原因。结果和清理就是我在这里的原因。:)
结果是创建了 ~sync “文件”,但它实际上是...到 /bin 的硬链接?这就是事情变得可疑的地方。我的ls -ial
样子是这样的:
3276803 -rw-rw-r-- 1 configbot configbot 125 Jul 4 00:30 '~sync'
所以它只是一个文本文件,所以让我们试试 cat...
$ cat ~sync
cat: /bin: Is a directory
嗯,好的。
$ cd ~sync
...将我的提示更改为 /bin,然后执行 ls,它肯定是 bin。顺便说一句,ls -ial
在我的根卷上显示 /bin 是 iNode 12。
这在我过去曾经发生过一次,我只是这样做了rm -rf ~sync
,它淹没了我的整个服务器,我不得不重建。所以我试图避免这种情况。
如何在不丢弃 /bin 的情况下摆脱这个奇怪的 ~sync 文件/文件夹/符号链接/硬链接?
一些附加信息:
/ebsvol
是一个单独的 EBS 卷,而不是/
(即单独的硬盘驱动器/分区!)rm ~sync
可能会起作用。但它不会显示相同的 iNode 编号吗?我正在尝试使用来自 Cloudwatch 代理的指标为可用磁盘空间实现警报(在 Cloudformation 中),但我遇到了设备改组 DeviceID 的问题。
我之前在使用 fstab 时遇到过这种情况,EC2 实例以看似随机的顺序附加 EBS 卷。如果我有两个 EBS 卷,一个用于操作系统,一个用于数据,它们可以在 nvme0n1/nvme1n1 之间随机交换。我能够使用分区 UUID 解决这个问题。
但是,在创建警报时,我认为没有办法解决这个问题。必须使用指定 DeviceID(nvme0n1) 和挂载点 (/var/data) 的指标来创建警报。这些可以在任何给定的引导时交换。请参阅https://imgur.com/a/XJ62zN8您可以看到当服务器重新启动时设备发生变化时,有四个数据点有效地表示两个信息点。
有什么方法可以在没有设备的情况下使 Cloudwatch 代理报告或编写警报以应用于任何设备指标?
我想使用系统调用将数据直接写入未安装的原始 EBS 卷(没有文件系统)。
1) 我可以通过 EBS 连接到的 EC2 实例执行此操作吗?
2) 我能否在没有关联 EC2 实例的情况下预置原始 EBS 卷并通过 API 对其进行读/写?