AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-333397

Thorsten Schöning's questions

Martin Hope
Thorsten Schöning
Asked: 2021-07-17 07:48:45 +0800 CST

如何使用 Windows DFS 复制严格序列化一个文件夹的复制?

  • 0

我有两个位置 A+B,需要使用 Windows DFS 复制以下列方式处理这些分支之间的一个特殊目录:所有写入 A 目录的内容都需要由 B 拉取。B 的那个目录中的所有删除都需要再次推到A。最后,它只是简单地将所有内容从 A 拉到 B,并在某个时刻在 A 和 B 处清空。

重要的是目录是一些特殊应用程序的文件系统接口。该应用程序仅在主机 B 上运行,而主机 A 为该应用程序创建数据。DFS 用于将数据从 A 可靠地传输到 B。

因为它是一个文件系统接口,所以它需要遵循一些约定,以便 B 处的应用程序知道它何时可以访问所有文件。该约定很简单,在创建所有数据之前创建一个特殊的锁定文件,并在创建所有数据后删除锁定文件。删除锁定文件意味着主机 B 上的应用程序可以随意处理数据。当然,与传输的其他数据相比,该锁定文件非常非常小,而所有其他数据理论上可能有数百 MiB 大小。因此,为了可靠地使用 DFS,复制时需要考虑文件系统操作的顺序。

从我目前所读到的关于 DFS 的内容来看,它可能会乱序传输文件:

DFS 复制是否按时间顺序复制文件?

不可以。文件可能会乱序复制。

OTOH,它已经通过 ID 跟踪文件,并且锁定文件的 ID 将低于其他文件的 ID。

如果我重命名文件会怎样?

DFS 复制在下一次复制期间重命名复制组的所有其他成员上的文件。使用唯一 ID 跟踪文件,因此重命名文件和在副本中移动文件不会影响 DFS 复制复制文件的能力。

此外,似乎还有一些关于并发下载的设置,在最坏的情况下可能会降低到 1。不过,这当然不能保证像我需要的那样严格的文件操作顺序。锁定文件可以在传输两个其他大文件之间简单地删除。

如何处理同时复制?

每个复制文件夹有一个更新管理器。更新管理器彼此独立工作。

使用Windows 更改日志并遵循要复制的源文件夹中的事件顺序,具有某种操作模式或类似的 DFS 会很棒。这应该保证 DFS 在第一个和最后一个操作中创建和删除锁定文件,就像在源文件夹中所做的那样。

那么,有什么方法可以让 DFS 中的文件操作严格排序,以便与基于文件系统的接口一起使用?

谢谢!

windows dfs distributed-filesystems
  • 1 个回答
  • 37 Views
Martin Hope
Thorsten Schöning
Asked: 2021-06-10 02:03:39 +0800 CST

Win Srv 2019 Essentials 中的用户限制适用于并发连接还是现有帐户?[复制]

  • 0
这个问题在这里已经有了答案:
你能帮我解决我的软件许可问题吗? (5 个回答)
去年关闭。

我有一个 Windows Server 2019 Essentials,它会记录错误并由于许可证问题而自动关闭。它记录以下内容:

Bei der Überprüfung der Benutzeranzahl wurde eine Bedingung in der Umgebung festgestellt, die nicht mit der Lizenzierungsrichtlinie konform ist. Der Server erfüllt nicht die Microsoft-Software-Lizenzbedingungen。Diese erlauben 最大 25 lokale Benutzerkonten。Der Computer 帽子 29 lokale Benutzerkonten。

我自己没有用德语安装那个操作系统,但最后几句话实际上只是意味着创建了太多帐户。这并不意味着有太多帐户同时连接到服务器或访问它的服务。这就是重点:其中许多帐户只是为备份或测试等目的而创建的特殊用户。它们并非都同时连接到服务器,其中大多数根本不会访问任何文件或打印机服务。

阅读有关该 Win Server 版本的用户限制时,我的印象是它与用户的并发使用有关,而不是纯粹存在多个用户帐户本身。其他人也明确写道:

这是 25 个连接/登录的用户限制。

不过,情况似乎并非如此,而是似乎可用帐户本身的数量,无论是否以及如何使用它们,已经是限制。

那么,25 个用户帐户的限制究竟适用于什么?

谢谢!

windows active-directory windows-server-2019
  • 1 个回答
  • 643 Views
Martin Hope
Thorsten Schöning
Asked: 2021-04-29 00:14:04 +0800 CST

如何使备份的域用户成为一个客户端上的备份操作员组的一部分?

  • 0

我正在使用 WBADMIN 将多个客户端备份到某些 Synology NAS 使用 SMB 发布的共享。该 NAS 集成在我的 Server 2019 AD 中,并且备份的 Windows 客户端是同一域的一部分。我的方法是在 AD 中为每个客户端创建一个特殊的备份用户,并仅为该用户配置对共享的访问权限。之后,我在 Windows 客户端的任务调度程序中创建了一个自定义任务,以执行一个 PowerShell 脚本,其中包含一些日志管理、发送邮件和类似的小东西来包装 WBADMIN 的执行。

重要的部分是创建的任务使用专门创建的域用户的凭据执行,仅用于备份这个客户端。所以最后我在 AD 中有 users 等backup_host1_wib。backup_host2_wib所有这些用户已经是域控制器上的组备份操作员的一部分,因为他们需要特殊权限才能由任务计划程序执行,访问要备份的文件等等。问题是即使这些用户被包含在内在域控制器上的该组中,客户端的任务计划程序拒绝执行任务,因为缺乏运行任务的权限。

相反,我需要做的是让每个主机的每个备份用户也成为客户端本地组备份操作员的成员。之后任务成功执行,WBADMIN 创建图像,一切都按预期工作。不过,因为我已经将这些用户添加到域控制器上的备份操作员中,所以我预计该组成员身份也会与各个客户端通信,并且我不需要手动为每个客户端分配组成员身份。

那么,这个特殊的组成员资格不向个人客户发布是设计行为还是我做错了什么?在我测试时,AD 上的组成员身份可能还没有发布给我的测试客户吗?虽然我认为我什至重新启动它并没有改变任何东西。

组成员

我是否真的需要创建一个 GPO 来让每个特殊备份用户获得每个相应客户端的预期权限,如下文所述?

对我来说没有太大意义,因为提到的 GPO 已经包含组备份操作员,并且添加到该组对我来说似乎更容易。

https://docs.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/back-up-files-and-directories

谢谢!

active-directory windows-server-2019
  • 1 个回答
  • 711 Views
Martin Hope
Thorsten Schöning
Asked: 2020-09-03 05:33:34 +0800 CST

ZFS“自动替换”何时生效?

  • 5

背景

autoreplace记录如下:

自动替换=打开 | off 控制自动设备更换。如果设置为“off”,则必须由管理员使用“zpool replace”命令启动设备更换。如果设置为“on”,则在与以前属于池的设备相同的物理位置找到的任何新设备都会自动格式化和替换。默认行为是“关闭”。此属性也可以通过其缩短的列名“replace”来引用。

以下是我感兴趣的池中该设置的当前状态:

root@[...]:/# zpool get autoreplace zfs-pool
NAME      PROPERTY     VALUE    SOURCE
zfs-pool  autoreplace  on       local

所以它似乎已启用。

观察

由于与 SMART 相关的错误,一个磁盘已被移除,并且 ZFS 正确地识别出该设备不再可用。使用过磁盘的镜像改为DEGRADEDetc。因为我有多个备用磁盘,所以我曾经zpool replace zfs-pool FAULTY_DISK SPARE_DISK临时放置一个备用磁盘。这是必要的,因为对于我正在使用的 UB 16.04,自动使用备件无法正常工作,甚至根本无法正常工作。

在镜像再次同步并且新磁盘已物理连接后,我重新启动了系统,否则使用的控制器会阻止访问新磁盘。在启动过程中,控制器会识别新磁盘,询问是否应启用这些磁盘,在前一种情况下,新磁盘随后可供操作系统使用。磁盘已初始化,分区已创建等,并且完全可用,就像之前在同一物理插槽中的故障磁盘一样。重要的是操作系统也像以前一样对磁盘使用相同的命名:/dev/sdf和/dev/disk/by-path/pci-0000:15:00.0-scsi-0:1:0:1-part*

尽管如此,ZFS 并没有自动使用新磁盘来替换以前的磁盘。尽管池的状态输出提到了旧磁盘的序列号丢失以及它过去的路径,这与新磁盘同时获得的相同。我需要使用zpool replace zfs-pool pci-0000:15:00.0-scsi-0:1:0:1-part3. 这使得 ZFS 将新磁盘放入正确的镜像中,因为路径相同,并且在重新同步后,备用磁盘也已自动删除。

NAME                                         STATE     READ WRITE CKSUM
zfs-pool                                     DEGRADED     0     0     0
  mirror-0                                   ONLINE       0     0     0
    pci-0000:05:00.0-scsi-0:1:0:0-part3      ONLINE       0     0     0
    pci-0000:15:00.0-scsi-0:1:0:0-part3      ONLINE       0     0     0
  mirror-1                                   DEGRADED     0     0     0
    pci-0000:05:00.0-scsi-0:1:0:1-part3      ONLINE       0     0     0
    spare-1                                  DEGRADED     0     0     0
      replacing-0                            DEGRADED     0     0     0
        11972718311040401135                 UNAVAIL      0     0     0  was /dev/disk/by-path/pci-0000:15:00.0-scsi-0:1:0:1-part3/old
        pci-0000:15:00.0-scsi-0:1:0:1-part3  ONLINE       0     0     0  (resilvering)
      pci-0000:15:00.0-scsi-0:1:0:3-part3    ONLINE       0     0     0
  mirror-2                                   ONLINE       0     0     0
    pci-0000:05:00.0-scsi-0:1:0:2-part3      ONLINE       0     0     0
    pci-0000:15:00.0-scsi-0:1:0:2-part3      ONLINE       0     0     0
spares
  pci-0000:05:00.0-scsi-0:1:0:3-part3        AVAIL
  pci-0000:15:00.0-scsi-0:1:0:3-part3        INUSE     currently in use

问题

虽然使用的命令是文档以这种方式工作,但我想知道为什么autoreplace启用它是必要的?新磁盘分区成功后不应该立即完成这一步骤吗?还是所autoreplace发出的命令完全需要该属性?没有记录依赖该设置:

如果池不是冗余的,则需要zpool replace [-f] pool old_device [new_device] [...] new_device。如果未指定 new_device,则默认为 old_device。这种替换形式在现有磁盘发生故障并被物理替换后很有用。在这种情况下,新磁盘可能与旧设备具有相同的 /dev/dsk 路径,即使它实际上是不同的磁盘。ZFS 认识到这一点。

hard-drive zfs ubuntu-16.04
  • 1 个回答
  • 2441 Views
Martin Hope
Thorsten Schöning
Asked: 2020-01-12 06:24:34 +0800 CST

“zpool scrub”什么时候会自动删除文件?

  • 4

背景是关于 ZFS 的一般性讨论,并声称如果文件出现永久性错误,它会自动删除文件,除非有正确的副本可用。这对我来说听起来很错误,后来被简化为只有在scrub执行时才会发生这种情况。

我从来没有读过这方面的信息,而我在网上发现的唯一发生此类事情的情况是发生校验和错误的情况,人们手动删除了损坏的文件并scrub随后运行。同一消息来源甚至在谈论第一次执行scrub时没有任何成功,将损坏的文件保留在适当的位置。当然,如果之前手动删除了文件,则删除文件的存储是完全有意义的。但声称是,如果没有手动删除scrub,无论如何都会自动删除文件。

文档只讨论如果工作副本可用,文件是如何处理的,但我没有读到任何删除:

对于复制的(镜像或 raidz)设备,ZFS 会自动修复在清理期间发现的任何损坏。

那么,在什么情况下会scrub自动删除东西呢?如果有的话。

谢谢!

zfs
  • 1 个回答
  • 381 Views
Martin Hope
Thorsten Schöning
Asked: 2019-07-22 06:03:03 +0800 CST

忽略一些中间快照以增量方式发送 ZFS 快照是否安全?

  • 2

一些背景。

我正在使用ZREP相互复制两台服务器,每台服务器都包含一个 ZFS 池,其中包含两个数据集作为复制主机和两组作为复制目标。主集包含本地服务器的系统和 VirtualBox-VM,复制目标与另一个相同。

此外,我正在将每台服务器的所有主集备份到使用rsync. NAS 非常慢,备份需要几个小时才能成功,因此实施的方法是暂停 VM,创建一个快照,还原 VM,rsync然后从创建的快照运行。重要的是手动创建的快照没有遵循 ZREP 命名约定,rsync再次完成后直接销毁。起初,ZREP 继续并行运行,由cron.

问题。

但时不时会发生 ZREP 进入某种无法再同步的状态。为了解决这个问题,一位同事告诉我他需要删除快照并按照流程重新初始化 ZREP。通过最终不再让 ZREPrsync与我们自己的快照并行运行,这个问题得到了解决。

遗憾的是,我缺乏该错误的具体细节,并且该同事不再可用,但从他的描述看来,在复制主机和目标之间找到快照的共同祖先以增量同步时存在问题。我认为错误消息类似于以下内容:

cannot receive incremental stream: most recent snapshot of zfs-pool/vbox/tori does not match incremental source
cannot open 'zfs-pool/vbox/tori@zrep_0001b7': dataset does not exist

我对增量发送/接收如何工作的理解。

根据我对文档和其他 问题的理解,要成功地增量发送快照,发送主机和接收目标需要共享一个用作参数 1 的快照,zfs send并且该快照还需要是接收目标上的当前快照。

第二个参数是一个任意较新的快照,ZFS 使用它来计算一个快照主节点和目标快照的共同差异,并将这些差异发送到复制目标。因为两者共享同一个指定为参数 1 的快照,所以差异对目标有意义并且可以简单地按原样应用。

根据我的理解,这些论点-i要么-I导致发送一个包含主端计算的所有增量数据的逻辑快照,要么发送包含其增量更改的所有中间快照。因此,例如-i,总是会导致目标上的一个新快照,而-I可能会导致 N 个额外的快照。

在作为 arg 1 和 2 提供的内容之间创建和销毁中间快照zfs send -i应该没有任何问题,因为 ZFS 总是只计算这两个提供的参数之间的差异,而不关心任何其他中间快照。在 ZREP 的情况下,这在理论上意味着只要我不干扰 ZREP 管理的快照,无论是否在其操作期间创建了额外的快照,它都不应该有任何区别。仅仅因为特殊的 ZREP 快照始终可用,由 ZREP 管理并用于计算复制差异。所以理论上,另外创建快照rsync和备份应该不是问题。

这些假设正确吗?

非 ZREP 相关问题。

一般而言,忽略一些中间快照以递增方式发送 ZFS 快照是否安全?或者是否有必要将曾经创建的所有中间快照发送到复制目标以使网络不同步或其他东西?事物如何依赖于-ivs. -I?

zfs
  • 1 个回答
  • 1798 Views
Martin Hope
Thorsten Schöning
Asked: 2019-02-26 00:22:04 +0800 CST

如何使“localedef”的结果在“dpkg-reconfigure locales”中存在?

  • 1

我使用的是 UB 16.04 LTS 服务器,昨天发布并安装了新版本的locales -package:

Start-Date: 2019-02-21  09:44:05
Commandline: /usr/bin/apt-get -y -o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confold dist-upgrade
Upgrade: [...], locales:amd64 (2.23-0ubuntu10, 2.23-0ubuntu11), [...]
End-Date: 2019-02-21  09:44:45

windows-1252由于历史原因,我还使用 PostgreSQL 11 和依赖字符集的数据库:

Name  |  Owner   | Encoding |   Collate    |    Ctype     |   Access[...]
------+----------+----------+--------------+--------------+--------------
[...] | postgres | WIN1252  | de_DE.CP1252 | de_DE.CP1252 |

为了使其可用,使用以下命令:

localedef -f CP1252 -i /usr/share/i18n/locales/de_DE /usr/lib/locale/de_DE.CP1252

使用locale-genbefore/afterlocaledef会出现以下错误:

locale-gen de_DE.CP1252
Error: 'de_DE.CP1252' is not a supported language or locale

该错误消息是正确的,该文件/usr/share/i18n/SUPPORTED不包含我的语言环境。据我了解,这就是为什么我需要使用localedef.

现在的问题是,很可能在安装新的locales-package 之后,我手动添加的一个被自动删除,并且访问依赖于该语言环境的数据库失败:

2019-02-21 09:42:45.109 CET [27039] FATAL:  Datenbank-Locale ist inkompatibel mit Betriebssystem
2019-02-21 09:42:45.109 CET [27039] DETAIL:  Die Datenbank wurde mit LC_COLLATE »de_DE.CP1252« initialisiert, was von setlocale() nicht erkannt wird.

据我了解,所有被识别和启用的语言环境dpkg-reconfigure locales都已保留,我的自定义语言环境未在此处列出。因此,我按照说明/etc/locale.gen并使用以下行创建了以下文件:

/usr/local/share/i18n/SUPPORTED
de_DE.CP1252 CP1252

这最终使我的语言环境可用:

在此处输入图像描述

问题是这似乎不足以解决我的目标:每当我运行dpkg-reconfigure locales时,创建的语言环境 usinglocaledef会从文件夹中删除,/usr/lib/locale/de_DE.CP1252并且 Postgres 再次失败。即使locale -a打印我的语言环境等。因此,这很可能是安装新locales软件包时/之后发生的情况。如果我localedef再次像上面记录的那样手动运行,Postgres 立即允许再次访问旧数据库。

我认识到的一件有趣的事情C.UTF-8是可用的语言环境,/usr/lib/locale就像我的自定义语言环境一样,但由于某种原因永远不会被自动删除。在 Web 中搜索该语言环境,它似乎是作为某个包的一部分由发行版提供,而不是根据需要在本地配置和生成:

我们现在有一个“不可安装的”C.UTF-8 语言环境,即使您删除了 locale-archive,或者更改了为 locale-archive 设置的已安装语言,它仍然可用。

https://bugzilla.redhat.com/show_bug.cgi?id=902094#c20

/usr/lib/locale/C.UTF-8/LC_ADDRESS
/usr/lib/locale/C.UTF-8/LC_COLLATE

https://packages.debian.org/de/sid/sh4/libc-bin/filelist

那么,我需要做些什么才能让我的localedef-results 存活下来dpkg-reconfigure locales,或者在安装新的locales-packages期间做了什么?

谢谢!

linux
  • 1 个回答
  • 597 Views
Martin Hope
Thorsten Schöning
Asked: 2018-05-02 23:39:19 +0800 CST

如何使 Ubuntu 16.04 的 initrd 除了 / 之外自动挂载 /home?

  • 0

这是关于 systemd、BTRFS、作为单独的子卷以及我想解决的 systemd 的以下限制的前一个问题的后续行动:/home

当 systemd 启动时,链接单元文件所在的文件系统必须是可访问的(例如,不允许 /home 或 /var 下的任何内容,除非这些目录位于根文件系统上)。

/home由 systemd 正确挂载,但包含 systemd 应该在引导期间启动的服务文件,但它不起作用。/etc/fstab如下所示:

# <file system> <mount point>   <type>  <options>  <dump>  <pass>
# / was on /dev/sda1 during installation
UUID=0841ef72-e9d4-45ca-af22-a403783859c6 /        btrfs   noatime,nodiratime,subvol=@ 0     1

# /home was on /dev/sda1 during installation
UUID=0841ef72-e9d4-45ca-af22-a403783859c6 /home    btrfs   noatime,nodiratime,subvol=@home 0 2

由于 initrd 是一个包含大量脚本的压缩档案,理论上可以解压(gzip -dc /.../initrd.gz | cpio -id),更改一些脚本并额外挂载/home。我已经在一个名为的文件中找到了以下代码,该文件init似乎负责安装/. 遵循这些函数调用揭示了fstab等的解析逻辑。

maybe_break mount
log_begin_msg "Mounting root file system"
# Always load local and nfs (since these might be needed for /etc or
# /usr, irrespective of the boot script used to mount the rootfs).
. /scripts/local
. /scripts/nfs
. /scripts/${BOOT}
parse_numeric ${ROOT}
maybe_break mountroot
mount_top
mount_premount
mountroot
log_end_msg

问题是我当然不想为 Ubuntu 的每个内核更新构建一个新的 initrd。

因此,除了手动自定义脚本之外,还有其他方法可以让 initrd 挂载其他文件系统/home吗?像在启动期间提供的内核参数之类的东西,也许一些钩子可以使用特殊文件/等触发?

我发现以下内容很有趣:

if read_fstab_entry /usr; then
        log_begin_msg "Mounting /usr file system"
        mountfs /usr
        log_end_msg
fi

如果我理解正确,这会识别出额外的挂载点/usr。但我找不到类似的东西/home。

systemd
  • 1 个回答
  • 720 Views
Martin Hope
Thorsten Schöning
Asked: 2018-05-02 06:54:03 +0800 CST

为什么 systemd 在 BTRFS 根文件系统的 BTRFS 子卷中找不到服务文件?

  • 0

我已经使用 BTRFS 安装了 Ubuntu 16.04 LTS 服务器,并根据以下设置进行了设置/etc/fstab:

# <file system> <mount point>   <type>  <options>  <dump>  <pass>
# / was on /dev/sda1 during installation
UUID=0841ef72-e9d4-45ca-af22-a403783859c6 /        btrfs   noatime,nodiratime,subvol=@ 0     1

# /home was on /dev/sda1 during installation
UUID=0841ef72-e9d4-45ca-af22-a403783859c6 /home    btrfs   noatime,nodiratime,subvol=@home 0 2

这对我来说很有意义,但导致我的 systemd-setup 出现问题。我为不同的客户存储软件,/home其中一些提供守护进程,这些守护进程应该在 systemd 系统引导期间自动启动。类似于以下内容:

/home/customer/someDaemon/cust_some_daemon.service

这可以使用systemctl enable ...上面的绝对路径轻松部署到 systemd。我不需要手动复制或链接东西,systemd 处理一切,systemctl enable ...只需成功并按预期创建链接。

不起作用的是在引导时启动这些服务,systemd 对所有这些服务都失败,并显示一条消息,它再也找不到链接的文件。如果我不使用/home但/直接存储这些文件或删除@home不再是额外的子卷,那么一切都会按预期工作。

文档中有以下句子enable:

当 systemd 启动时,链接单元文件所在的文件系统必须是可访问的(例如,不允许 /home 或 /var 下的任何内容,除非这些目录位于根文件系统上)。

我不清楚在这种情况下到底有什么限制:是使用单个子卷本身还是因为它需要额外安装?/需要安装并且本身也是一个子卷,但这显然是受支持的。尤其是由于 BTRFS 和 ZFS 关于子卷的动态特性,我原以为 systemd 至少也支持一些公共根文件系统或池中的多个子卷。但它要么不处理,要么不能处理额外的挂载点。

那么这里的问题到底是什么?谢谢!

systemd
  • 3 个回答
  • 369 Views
Martin Hope
Thorsten Schöning
Asked: 2018-04-19 09:27:35 +0800 CST

Linux 中冷启动后的初始任务/内核/cpu 调度程序值来自哪里?

  • 1

这个问题与前一个问题有关,其中包含我问题的全部背景。该背景的总结是我有两个几乎相同的虚拟机,其中一个在一些 CPU 密集型工作负载下扩展非常糟糕,我认为至少涉及一些 I/O。所以我现在正在做的是比较sysctl -a两个虚拟机的输出并研究差异。

这些差异之一是关于任务调度程序,在有问题的 VM 上冷启动后的初始值远高于另一个。所以我在徘徊这些价值观最初来自哪里?例如,如果它们被计算,它们依赖于哪些事实,可能是 VM 主机,它们是否在运行时自动更改等。关于这些不同值是否会对系统的整体扩展产生任何合理影响的估计也是受欢迎的。

以下是不同值的示例,而我仅提供 8 个 vCPU 和整体调度程序设置之一。每个 vCPU 的重要部分看起来非常相似。

好与坏的虚拟机:

--- C:/Users/tschoening/Desktop/Good VM.txt Mi 18. Apr 19:24:47 2018
+++ C:/Users/tschoening/Desktop/Bad VM.txt  Mi 18. Apr 19:24:44 2018
@@ -8,3 +8,3 @@ kernel.sched_domain.cpu0.domain0.imbalance_pct = 1
-kernel.sched_domain.cpu0.domain0.max_interval = 4
-kernel.sched_domain.cpu0.domain0.max_newidle_lb_cost = 75519
-kernel.sched_domain.cpu0.domain0.min_interval = 2
+kernel.sched_domain.cpu0.domain0.max_interval = 16
+kernel.sched_domain.cpu0.domain0.max_newidle_lb_cost = 155384
+kernel.sched_domain.cpu0.domain0.min_interval = 8
@@ -15 +15 @@ kernel.sched_domain.cpu0.domain0.wake_idx = 0
-kernel.sched_latency_ns = 12000000
+kernel.sched_latency_ns = 24000000
@@ -17 +17 @@ kernel.sched_migration_cost_ns = 500000
-kernel.sched_min_granularity_ns = 1500000
+kernel.sched_min_granularity_ns = 3000000
@@ -25 +25 @@ kernel.sched_tunable_scaling = 1
-kernel.sched_wakeup_granularity_ns = 2000000
+kernel.sched_wakeup_granularity_ns = 4000000

好的虚拟机:

kernel.sched_domain.cpu0.domain0.busy_factor = 32
kernel.sched_domain.cpu0.domain0.busy_idx = 2
kernel.sched_domain.cpu0.domain0.cache_nice_tries = 1
kernel.sched_domain.cpu0.domain0.flags = 4143
kernel.sched_domain.cpu0.domain0.forkexec_idx = 0
kernel.sched_domain.cpu0.domain0.idle_idx = 1
kernel.sched_domain.cpu0.domain0.imbalance_pct = 125
kernel.sched_domain.cpu0.domain0.max_interval = 4
kernel.sched_domain.cpu0.domain0.max_newidle_lb_cost = 75519
kernel.sched_domain.cpu0.domain0.min_interval = 2
kernel.sched_domain.cpu0.domain0.name = DIE
kernel.sched_domain.cpu0.domain0.newidle_idx = 0
kernel.sched_domain.cpu0.domain0.wake_idx = 0

kernel.sched_latency_ns = 12000000
kernel.sched_migration_cost_ns = 500000
kernel.sched_min_granularity_ns = 1500000
kernel.sched_nr_migrate = 32
kernel.sched_rr_timeslice_ms = 25
kernel.sched_rt_period_us = 1000000
kernel.sched_rt_runtime_us = 950000
kernel.sched_shares_window_ns = 10000000
kernel.sched_time_avg_ms = 1000
kernel.sched_tunable_scaling = 1
kernel.sched_wakeup_granularity_ns = 2000000

坏虚拟机:

kernel.sched_domain.cpu0.domain0.busy_factor = 32
kernel.sched_domain.cpu0.domain0.busy_idx = 2
kernel.sched_domain.cpu0.domain0.cache_nice_tries = 1
kernel.sched_domain.cpu0.domain0.flags = 4143
kernel.sched_domain.cpu0.domain0.forkexec_idx = 0
kernel.sched_domain.cpu0.domain0.idle_idx = 1
kernel.sched_domain.cpu0.domain0.imbalance_pct = 125
kernel.sched_domain.cpu0.domain0.max_interval = 16
kernel.sched_domain.cpu0.domain0.max_newidle_lb_cost = 155384
kernel.sched_domain.cpu0.domain0.min_interval = 8
kernel.sched_domain.cpu0.domain0.name = DIE
kernel.sched_domain.cpu0.domain0.newidle_idx = 0
kernel.sched_domain.cpu0.domain0.wake_idx = 0

kernel.sched_latency_ns = 24000000
kernel.sched_migration_cost_ns = 500000
kernel.sched_min_granularity_ns = 3000000
kernel.sched_nr_migrate = 32
kernel.sched_rr_timeslice_ms = 25
kernel.sched_rt_period_us = 1000000
kernel.sched_rt_runtime_us = 950000
kernel.sched_shares_window_ns = 10000000
kernel.sched_time_avg_ms = 1000
kernel.sched_tunable_scaling = 1
kernel.sched_wakeup_granularity_ns = 4000000
linux
  • 1 个回答
  • 2245 Views
Martin Hope
Thorsten Schöning
Asked: 2018-04-19 01:51:03 +0800 CST

在 Linux 中启用/禁用异步文件 io 的所有/大多数方法是什么?

  • 0

长话短说,我有两台相同的服务器使用 VirtualBox 托管虚拟机,两台服务器都托管一个虚拟机,每个虚拟机的设置方式几乎相同,只有一个用于生产,另一个用于内部测试和开发。重要的是服务器的硬件和操作系统是相同的,两个虚拟机都使用相同的操作系统,运行的软件也基本相同,只是使用场景有点不同。问题是,在运行一段时间后,我在生产虚拟机上遇到了一些工作负载的大量性能问题,我无法为内部虚拟机重现这些问题。

VM 中的所有软件通常都“正常”工作,没有错误,只是某些工作负载能够在 VM 上施加如此高的负载/开销/任何东西,以至于它变得非常缓慢且无法使用。经过几个小时的运行后,即使重新启动 ClamAV 守护程序也已经触发了问题。我也可以通过 Tomcat 上的一些特殊负载来触发它,并且所有情况都有大量 CPU 和至少一些共同的 I/O。但只有在 prod 中,具有相同数量的 CPU、RAM 等的测试 VM 才能按预期工作。即使在 prod-VM 中,问题也不会在重新启动后直接出现,似乎只是在运行几个小时后才会出现。

我现在正在做的是比较sysctl -a两个系统并检查哪些差异可能导致我的性能问题。一个区别如下:

fs.aio-max-nr = 65536
fs.aio-nr = 0

对比

fs.aio-max-nr = 65536
fs.aio-nr = 2661

第一个是生产虚拟机。我也有其他一些虚拟机0,但也有一些非 0。0因为 prod- 和 test-VM 托管非常相似的软件,httpd、Tomcat7、Postgres 9.6、自定义 Perl 服务等,所以对我来说,一个拥有而另一个没有,对我来说没有任何意义。从我所读到的,0仅仅意味着没有人在 prod-VM 中使用异步 I/O,而是在 test-VM 中使用。由于使用的是相同的软件,这不太可能。

所以我猜测由于某种原因存在一些配置差异,导致 prod-VM 中的软件认为它不能使用异步 I/O,这可能会在我的用例中大幅降低性能。

虽然aio-max-nr显然不是问题,但是否有其他设置、包、库或任何可能影响该软件认为异步 I/O 不可用的东西?

我发现的唯一东西是特定于软件的,但与我正在使用的软件无关,或者被提及fs.aio-max-nr为可能的瓶颈,这显然不是我的情况。

过去,至少在原则上检查异步 I/O 是否可用的以下操作似乎有效,但在我的任何系统上都找不到任何东西,这似乎不再是这种情况。

grep kio /proc/slabinfo

https://kbflow.wordpress.com/2013/02/25/check-if-async-io-is-enabled-in-centos/ https://www.systutorials.com/linux-kernels/125888/patch- aio-remove-kioctx-from-mm_struct-linux-2-6-15/

以下确实提供了两个系统上相同的一些数据和结果:

ls -l /sys/kernel/slab | grep kio

lrwxrwxrwx 1 root root 0 Apr 18 13:03 aio_kiocb -> :t-0000128
lrwxrwxrwx 1 root root 0 Apr 18 13:02 kioctx -> :t-0000640

https://community.oracle.com/message/14732908#14732908

不过,不确定这些数据告诉我什么,一些数据在两个 VM 上是相等的,有些是不同的,尤其objects_partial是0在 prod-VM 上。我希望在一些配置文件中找到一些简单的开关或类似的东西。:-)

AIO 在内核本身中启用:

cat /boot/config-4.4.0-119-generic | grep AIO

CONFIG_AIO=y
CONFIG_COMEDI_AIO_AIO12_8=m
CONFIG_COMEDI_AIO_IIRO_16=m
CONFIG_DELL_WMI_AIO=m
linux
  • 1 个回答
  • 744 Views
Martin Hope
Thorsten Schöning
Asked: 2017-05-28 03:00:18 +0800 CST

使用快照的 ZFS 可以使用同步协议 A 替换 DRBD 吗?

  • 9

这个问题与以前的一个更通用的问题有关,但这次我想更具体地问一下 ZFS 是否可以在像我这样的用例中取代 DRBD。也就是说,两台服务器都托管自己的虚拟机或其他服务,同时将虚拟机或其他一些数据相互复制,以缩短硬件故障或维护时的停机时间。此设置符合预期,我想要首选的本地读取/写入,并且可以在某个任意时间范围内承受潜在的数据丢失。

DRBD 使用不同的镜像协议支持这种场景,其中复制协议 A是异步的,因为我需要它。DRBD 在我的设置中的主要好处是切换到更同步的协议很容易,只需配置和重新启动即可。此外,可以将 dm-crypt 放在 DRBD 块设备之上,并将文件系统放入 dm-crypt 中,以便对每个数据进行加密。

另一方面,DRBD 的问题是它需要块设备,并且必须使用 RAID 和 LVM 等其他技术来关心它们的可用性和大小。尤其是调整大小的事情似乎很有趣,因为我的服务器有空闲插槽可以在将来连接更多磁盘。为了支持调整大小,我需要在 DRBD 下使用 LVM,首先使用 LVM 添加存储,然后调整 DRBD 的大小以考虑新存储。比我还需要处理 dm-crypt、文件系统本身等。这读起来很复杂,而且对我来说容易出错。

另一方面,像 ZFS 这样的文件系统已经提供了自己的 LVM,并且能够发送/接收增量快照。所以理论上 ZFS 应该能够实现相同的协议 像 DRBD 这样的方法不需要使用 RAID、LVM 等。只需将存储添加到服务器,将其放入 ZFS 池中,它就可以立即用于托管更多/更大的虚拟机或其他。发送/接收快照听起来和 DRBD 所做的一样高效,因为它只是增量二进制数据,需要任何开销来描述接收 ZFS 中要理解的更改。我读过有人使用无限循环,没有睡眠时间发送/接收 ZFS 快照,然后再次直接在源中删除它们,因为它们仅用于短期复制。

不过,加密对 ZFS 来说似乎是个问题。dm-crypt 可能适用于 zvols 之类的东西,将来它可能会直接支持加密,但目前不支持。此外,发送/接收快照似乎总是异步的,如果需要,没有办法实现像 DRBD 提供的更同步的协议。不过这可能是可以接受的,因为不需要使用 LVM 并使整体设置更容易。

还是我错了,除了发送/接收快照之外,还有其他方法 ZFS 如何能够将数据转发到开箱即用的其他主机和仅 ZFS?

您是否发现在短时间内使用 ZFS 与 DRBD 镜像协议发送/接收快照存在一些基本的性能差异或限制?后者可能会更有效率,因为我猜只有块级别。

您能想到 DRBD 和 ZFS 之间的其他区别吗?请记住,我目前不需要 DRBD 的 HA 东西,我现在专注于数据的复制。

谢谢!

replication
  • 1 个回答
  • 2805 Views
Martin Hope
Thorsten Schöning
Asked: 2016-01-23 02:33:18 +0800 CST

按需保存来自 Postgres 的 stats_temp_directory 的统计数据

  • 1

我们正在调查我们的一个虚拟机中的 I/O 负载以及优化它的可能性,结果表明大部分负载是由 PostgreSQL 的统计信息收集器生成的。它在 3,5 和 6,5 MB/s 之间跳跃。我已经找到了一些关于这个主题的有趣资源,他们建议使用 tmpfs 将大部分统计信息保存在内存中,这对我来说很有意义,并且具体的 VM 有足够的可用 RAM 来支持这种情况。

来源 1 说明如下:

重新启动后,PostgreSQL 会将文件复制到新位置(并在停止时返回)。

这与temp配置名称中的stats_temp_directory声音相结合,就像数据被保存在其他地方一样。

那么在 Postgres 进程不正常关闭的情况下临时数据会发生什么情况呢?如果该过程在上周运行而没有任何问题,它是否完全丢失了?还是 Postgres 在运行时定期将数据保存在临时目录之外?它可以在不干净的关机后简单地使用可用的临时数据吗?

我之所以问,是因为目前一旦写入的数据会持久保存在本地文件系统中,并且写入数据的操作似乎是原子的,但是如果我们改用 tmpfs,如果整个服务器出现故障,可能会丢失几周的统计数据一些原因。

有没有办法让 Postgres 定期保存 tmpfs 之外的数据,比如每隔几个小时左右一次?

或者我是否需要使用一些覆盖/堆叠/任何文件系统,将持久的文件系统安装为较低的,将 tmpfs 安装为较高的,并找到某种方法来手动同步一次?

谢谢!

performance
  • 1 个回答
  • 432 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve