小编Jer*_*ner的帖子

获取有关当前未安装驱动器的信息的最佳方式是什么?

首先,情况:我有一台带有两个 eSATA 驱动器托架的 Linux 计算机,可以接受可移动 SSD 驱动器。我正在尝试编写一个小的 GUI 应用程序,使用户可以更轻松地安装/卸载/格式化/备份/等他放入这些托架中的驱动器。

这一切大部分都有效。然而,一个小问题是,在成功安装驱动器之前,我不知道如何查找有关插入驱动器上的内容的任何信息。

因此,例如,如果用户插入了一个我无法挂载的驱动器(例如,因为它未格式化,或使用意外的文件系统进行了格式化),我的应用程序只能说“驱动器无法挂载”。

这不是很令人满意,因为如果驱动器未格式化,用户可能想对其进行格式化……但如果驱动器包含来自无法识别的文件系统的数据,用户可能不想对其进行格式化……或至少,我希望能够警告他这样做会删除潜在的有价值的数据。

所以我的问题是:是否有任何方法可以从不需要已安装驱动器的驱动器中查询一些基本信息(尤其是文件系统类型)?或者我是否只需要尝试使用各种已知的文件系统挂载它,直到其中一个挂载尝试成功,如果没有一个挂载成功,则给出一个模糊的“小心”消息?

万一重要,我用来在驱动器托架中安装驱动器的路径是:

/dev/disk/by-path/pci-0000:00:1f.2-scsi-2:0:0:0
/dev/disk/by-path/pci-0000:00:1f.2-scsi-1:0:0:0
Run Code Online (Sandbox Code Playgroud)

linux mount esata removable-storage

42
推荐指数
2
解决办法
12万
查看次数

SSD 驱动器的 ext3 分区上的突然断电后文件系统损坏是“预期行为”吗?

我的公司制造了一个嵌入式 Debian Linux 设备,它从内部 SSD 驱动器上的 ext3 分区启动。由于该设备是一个嵌入式“黑匣子”,它通常以粗鲁的方式关闭,只需通过外部开关切断设备的电源即可。

这通常是没问题的,因为 ext3 的日志记录使事情井然有序,所以除了偶尔丢失部分日志文件之外,事情一直在顺利进行。

但是,我们最近看到许多单元在经过多次硬电源循环后,ext3 分区开始出现结构性问题——特别是,我们在 ext3 分区上运行 e2fsck,它发现了许多类似的问题显示在此问题底部的输出列表中。运行 e2fsck 直到它停止报告错误(或重新格式化分区)会清除问题。

我的问题是……在遭受大量突然/意外关闭的 ext3/SSD 系统上看到这样的问题有什么含义?

我的感觉是这可能是我们系统中软件或硬件问题的迹象,因为我的理解是(除非出现错误或硬件问题)ext3 的日志记录功能应该可以防止此类文件系统完整性错误。(注意:我知道用户数据没有被记录在日志中,因此可能会发生被删除/丢失/截断的用户文件;我在这里专门讨论文件系统元数据错误,如下所示)

另一方面,我的同事说这是已知/预期的行为,因为 SSD 控制器有时会重新排序写入命令,这可能会导致 ext3 日志混淆。特别是,他认为,即使在正常运行的硬件和没有错误的软件的情况下,ext3 日志也只会降低文件系统损坏的可能性,并非不可能,因此我们不应该对时不时地看到这样的问题感到惊讶。

我们谁是对的?

Embedded-PC-failsafe:~# ls
Embedded-PC-failsafe:~# umount /mnt/unionfs
Embedded-PC-failsafe:~# e2fsck /dev/sda3
e2fsck 1.41.3 (12-Oct-2008)
embeddedrootwrite contains a file system with errors, check forced.
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Invalid inode number for '.' in directory inode 46948.
Fix<y>? yes

Directory inode 46948, block 0, offset 12: …
Run Code Online (Sandbox Code Playgroud)

hardware filesystems ext3 ssd

13
推荐指数
1
解决办法
2537
查看次数

有没有办法设置 Avahi 在 LAN 上实现“任播名称解析”?

首先是一些背景知识:我们有一个实验室,其中包含一些运行在隔离 LAN 上的专用 Linux 服务器。所有服务器运行相同的操作系统 (Debian Linux) 和相同的专有服务器软件,服务器进程相互通信以保持数据同步。这意味着就任何客户端而言,客户端连接到哪个服务器并不重要——任何服务器都将返回与其他任何服务器相同的数据。

这些 Linux 服务器都运行 avahi-daemon 来为自己发布 mDNS 主机名,这意味着客户端可以输入例如“ http://linux-server-1.local”。进入他的 Web 浏览器并连接到 Linux 服务器 #1,依此类推。

这一切都很好,只是这意味着坐在客户端机器上的用户(通常是安装了 Bonjour 的 Mac 或 Windows 笔记本电脑)必须知道(或弄清楚)哪些 Linux 服务器当前在线,并且他必须确保他连接到其中之一。例如,如果服务器#2 今天离线,并且客户端输入“ http://linux-server-2.local”。进入他的网址栏,他不会得到回应。当然,这不是世界末日,但对于希望一切“正常工作”的新手用户来说,这很烦人,而且它还使健壮的客户端脚本的开发变得更加复杂(因为客户端脚本需要知道如何明确处理离线服务器)。

考虑到这一点,我的问题是:是否可以配置 Avahi 来发布任播风格的 mDNS 主机名别名?目标是任何人都可以坐在他的笔记本电脑上,输入“ http://any-linux-server.local”。(或类似的),并连接到当前在线的服务器之一(同样,哪个服务器无关紧要)。

请注意,这需要在客户端笔记本电脑没有任何特殊配置的情况下工作,因为我们无法控制它们(除了需要安装 Bonjour 之外)。

另请注意,我们不能依赖单独的名称服务器或代理框的存在,或依赖任何特定 Linux 服务器的存在,因为这会引入我们试图避免的单点故障。

mdns bonjour anycast avahi

9
推荐指数
1
解决办法
1189
查看次数

如何更新我的 /etc/network/interfaces 文件,以便该框仅提供 IPv6 自分配地址?

对于这个公然的新手问题,我深表歉意,但我想以“正确的方式”来做这件事,而不仅仅是在它似乎有效之前就胡说八道,而且我拥有的文档似乎没有解决这个问题。

目前,我正在使用的 Debian Linux 机器具有以下 /etc/network/interfaces 文件:

auto lo
iface lo inet loopback
auto bond0
iface bond0 inet dhcp
pre-up modprobe bonding mode=active-backup miimon=100 primary=eth0
pre-up ip link set bond0 up
pre-up /sbin/ifenslave bond0 eth0
pre-up /sbin/ifenslave bond0 eth1
Run Code Online (Sandbox Code Playgroud)

上面的工作正常,并且主要做我想要的 - 在启动时,盒子出现并且两个以太网插孔用于故障转移/冗余(即盒子在工作时使用第一个插孔进行通信,否则它使用第二个插孔)。

但是,出于我的目的,我不想使用 IPv4 或 DHCP。我希望盒子只使用盒子的 IPv6 自分配地址(即 fe80::whatever:it:is)而不使用其他 IP 地址(嗯......环回可以)来提出 bond0。指定这个的正确方法是什么?我应该将“iface bond0 inet dhcp”更改为“iface bond0 inet6”吗?完全删除那条线?还有什么?理想情况下,我希望能够在多个盒子上使用完全相同的文件,而无需为每个盒子修改它,顺便说一句。

debian ipv6 interface

8
推荐指数
1
解决办法
3659
查看次数

有什么方法可以强制我的 Linux 机器始终使用自分配的 IP 地址启动?

这可能是一个不寻常的请求:我试图让 Debian Linux 机器在启动时始终给自己分配一个自分配的 IP 地址(即 169.254.xy)。特别是,即使 LAN 上存在 DHCP 服务器,我也希望它这样做。也就是说,它应该不是从DHCP服务器请求IP地址。

从我在“man interfaces”文本中看到的,有一个“manual”选项和一个“dhcp”选项。手动分配是行不通的,因为我需要多个盒子在同一个 LAN 上工作而不需要任何手动配置......而“dhcp”可以做我想要的,但前提是 LAN 上没有 DHCP 服务器。(一个要求是这些盒子的功能不应受到 DHCP 服务器存在与否的影响)。

有什么技巧可以用来获得这种行为吗?

编辑:通过“无手动配置”,我的意思是我应该能够将这个盒子(无头)带到任何地方的任何局域网,插入以太网电缆,让它做它的事情。每次移动到不同的 LAN 时,我都不必通过 ssh 连接到该框并编辑文件以使其正常工作。

dhcp linux interface

7
推荐指数
1
解决办法
7064
查看次数

“强化”嵌入式 ext4 文件服务器以防止意外断电的最佳方法?

首先,介绍一下背景知识:我的公司制造了一个音频流设备,它是一个无头的机架安装式 Linux 机器,并连接了一个固态 e-SATA 驱动器。驱动器格式化为 ext4。用户可以使用 Samba/CIFS 连接到系统以上传新的音频文件或访问现有的音频文件。还有用于通过网络流式传输音频的自定义软件。

这一切都很好。唯一的问题是用户是音频人员,而不是计算机人员,并且将系统视为“黑匣子”,而不是计算机。这意味着在一天结束时,他们不会通过 ssh 进入框并输入“/sbin/shutdown -h”;他们只是要切断机架的电源并离开,并期望第二天一切仍能正常工作。

由于 ext4 具有日志记录、日志校验和等功能,这主要是有效的。它唯一不起作用的情况是有人通过 Samba 上传新文件,然后在上传的数据完全刷新到磁盘之前切断系统电源。在这种情况下,他们第二天来时发现他们的新文件已被截断或完全丢失,并且很不高兴。

我的问题是,避免这个问题的最佳方法是什么?有没有办法让 smbd 在每次上传结束时调用“同步”?(上传的性能不是那么重要,因为它们只是偶尔发生)。或者有没有办法告诉 ext4 在对文件进行任何更改后的几秒钟内自动刷新?(同样,这里为了安全可以牺牲性能)我应该设置特定的写入顺序模式,激活屏障等吗?

ext4 data-protection

6
推荐指数
1
解决办法
1516
查看次数

是否有一种在托管交换机上以编程方式配置 VLAN 的好方法?

我的情况是,我公司生产的产品(目前)要求用户在专用于我们产品的托管交换机上设置十几个左右的 VLAN。

目前,它的工作方式是这样的:用户将他的系统配置首选项输入到我们提供的专有(基于 Qt)的 GUI 中,当他完成后,GUI 会输出一个“VLAN 配置报告”,指示需要哪些 VLAN设置,以及哪些以太网端口应该是哪些 VLAN 的成员。然后,用户负责使用交换机的 Web 界面将这些设置手动输入交换机。

这种“某种”工作,但要求用户输入所有这些数据既乏味又容易出错,所以我们想以某种方式自动化这个过程:也就是说,让我们的程序直接连接到管理交换机并告诉交换机要设置哪些 VLAN 以及要为其分配哪些端口。

做这个的最好方式是什么?这是可以使用SNMP完成的事情吗?如果是这样,我应该从哪里开始实现这样的功能?(我对基本的 TCP/IP 编程相当有经验,但我不知道从哪里开始使用 SNMP。)

vlan snmp

6
推荐指数
3
解决办法
4191
查看次数

这个 IPv6-link-local 地址(由 Windows 报告)是否正确?如果是这样,为什么?

根据我在网上阅读的内容,通过获取网络接口的 MAC 地址,在其中插入一个 FF:FE 字,或者在一些附加位中进行 OR 运算,等等,就可以生成 IPv6 链路本地地址:例如 MAC 地址 00: 3E:E1:c6:20:c2 对应 IPv6 链路本地地址 fe80::23e:e1ff:fec6:20c2%en0,知道 MAC 地址的程序可以计算 IPv6 地址,反之亦然。

这在我的 Macintosh 上似乎运行良好,但在我同事的 Windows 机器上,我们看到了这一点(来自 ipconfig 的输出):

Connection-specific DNS Suffix  . :
Link-local IPv6 Address . . . . . : fe80::eb:b41:3e4c:fd9e%11
IPv4 Address. . . . . . . . . . . : 192.168.0.3
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . …
Run Code Online (Sandbox Code Playgroud)

windows ipv6 link-local

6
推荐指数
1
解决办法
1677
查看次数

为什么 Windows 版 Bonjour 看不到我的仅支持 IPv6 的 Linux 主机?

在我的 LAN 上,我有三个基本相同的 Debian Linux 机器运行 Avahi。其中一个既有IPv4地址又有IPv6地址,另外两个只有IPv6地址。它们都显示在我 Mac 上的 Bonjour 浏览器中,如下所示:

Workgroup Manager (_workstation._tcp.) - 4
  box-1 [00:60:2b:02:45:f8]
    [fe80::260:2bff:fe02:45f8]:9
    192.168.1.78:9
  box-2 [00:60:2b:02:46:1b]
    [fe80::260:2bff:fe02:461b]:9
  box-3 [00:60:2b:02:42:e2]
    [fe80::260:sbff:fe02:42e2]:9
Run Code Online (Sandbox Code Playgroud)

在我的 Mac 上,一切都很好……我可以解析 box-1.local.、box-2.local. 和 box-3.local.、ping6 到其中任何一个、ssh 到其中任何一个等.

然而,我的 Windows 7 机器只能看到 box-1。例如,在命令提示符窗口中执行 dns-sd 会让我得到这个:

C:\>dns-sd -B _ssh._tcp
Browsing for _ssh._tcp
Timestamp     A/R Flags if Domain                    Service Type              Instance Name
12:41:14.492  Add     2 17 local.                    _ssh._tcp.                box-1 SSH
Run Code Online (Sandbox Code Playgroud)

通过其 Bonjour 名称和 IPv6 ping 该框有效:

C:\>ping -6 msli-dcm-2-10330688.local.

Pinging msli-dcm-2-10330688.local. [fe80::260:2bff:fe02:45f8%17] with 32 bytes of …
Run Code Online (Sandbox Code Playgroud)

windows ipv6 bonjour avahi

5
推荐指数
1
解决办法
1313
查看次数

是否真的有必要在非托管断电之前调用 /bin/sync 两次?

我的公司销售一种“嵌入式设备”,它是在内部 SSD 上实现为带有 ext4 的无头 Linux 机器。我们的一些用户习惯于在此框上执行“保存当前设置”,然后在设备报告保存完成后立即切断设备电源(即两秒钟后)。这会导致保存的文件偶尔损坏,因为在断电之前数据不会总是刷新到 SSD。所以我调整了我的软件以在写入文件后立即运行 /bin/sync (在关闭文件句柄之后但在通知用户保存完成之前)。这似乎解决了这个问题,但我的同事说对 /bin/sync 的一次调用是不够的,为了真正安全,我应该连续运行两次 /bin/sync。

对我来说,这听起来像是偏执狂......也许是早期版本的 Linux 或 unix 的习惯,它们的同步实用程序不能可靠地工作。他的建议是否有价值,还是只调用一次 /bin/sync 就足够了?

linux ext4 synchronization

3
推荐指数
1
解决办法
2919
查看次数

获得以太网“透明”冗余的最佳方法?

如果这是一个明显的问题,我很抱歉,就冗余网络而言,我是一个新手,而且我不确定谷歌的关键字是什么。我的应用场景是这样的:

  • 该系统由少量基于 Linux 的服务器组成(1 到 20 台)
  • 每台服务器上都有两个物理以太网插孔
  • 该系统在隔离的 LAN 上运行 - 它不以任何方式连接到互联网
  • 每个服务器上运行的(自定义/内部)应用程序软件通过持久 TCP 连接和/或 UDP 多播与其他服务器上的对等方进行通信。
  • 所有通信均通过 IPv6 进行
  • 为了获得网络冗余,最明显的做法是拥有两个高速以太网交换机,并将每个 Linux 服务器连接到这两个交换机。这样,如果其中一个交换机发生故障,或者有人意外切断以太网电缆,则可以通过另一根电缆/交换机继续进行通信,并且系统将保持完整功能。

    我的问题是,有没有办法让冗余对应用软件100%透明?(所谓透明,我的意思是应用程序软件不必知道或关心有多个以太网端口;理想情况下它只会看到 eth0 而不是 eth1...并且如果数据停止流过其中一个端口,无论出于何种原因,两个物理以太网端口,应用程序软件都不必检测故障或执行任何特殊操作才能继续工作)。

    额外的带宽对于我的目的来说并不重要(千兆以太网的一个“通道”足够快),但简单性和可靠性很重要。

    ethernet redundancy

    2
    推荐指数
    1
    解决办法
    742
    查看次数

    为什么我的无侦听器多播数据包会影响 Wifi 性能?

    我有一个程序每 50 毫秒发送一个 IPv6 多播数据包(到 ff12::2:0:8afb:382b:c053:85f%en1)。我让它在一个非常简单的单计算机 LAN 上运行(Mac mini <-wifi-> Linksys wifi 路由器 <-cat5-> DSL 调制解调器 <-> Internet)。在我的测试中,没有计算机加入这个多播组(即没有人在监听这些数据包)

    我的问题是,当这个程序运行时,Mac 的 WiFi 性能下降了 50% 以上。据推测,问题在于所有这些多播数据包都占用了我的大量 WiFi 带宽并导致拥塞……但我根本不明白为什么要传输这些数据包。我的理解是多播使用生成树算法来确保多播数据包只路由到真正有兴趣接收它们的主机。如果这是真的,并且鉴于我的 LAN 上没有其他计算机加入到这个多播地址,我的 Mac 难道不应该意识到这一点并且实际上不发送任何数据包,除非/直到其他主机加入多播组?或者生成树剔除仅在交换机上实现,而不是由主机本身实现?

    networking wifi multicast

    2
    推荐指数
    1
    解决办法
    1881
    查看次数

    管理以太网交换机每端口 MAC 地址转换?

    只是在黑暗中试一试,但我想我会问,以防万一有人有一些想法:

    我有一个测试场景,其中一些(无 GUI/嵌入式)IPv6 设备将临时插入托管以太网交换机的端口,以及一个控制程序(在单独的 Linux PC 上运行,也连接到交换机) 将检测这些设备之一何时出现在 LAN 上,并自动运行测试以确保设备正常工作。

    通常会同时连接十几个这样的设备(因此我们可以并行运行测试),并且设备将由不一定了解网络的人定期连接和断开连接;他们只知道如何插入以太网电缆,然后(几个小时后)查看 PC 的屏幕以查看测试是否通过。

    当前的问题是如何在特定设备未通过测试时向测试人员指示。一种选择是错误日志/消息包含设备的 MAC 地址(源自其本地链路 IPv6 地址),这在紧要关头可能就足够了,但如果测试程序也可以说类似的话会更好“连接到端口 #5 的设备工作不正常,看看那个”。这样一来,测试人员就可以沿着以太网电缆找到故障设备,而不必弄清楚每个设备的 MAC 地址是什么,直到他/她找到匹配的设备。

    认为Linux 计算机不可能知道特定设备连接到哪个交换机端口(如果我错了,请告诉我)。但假设是这种情况,下一个最好的事情是,如果我可以对交换机进行编程以进行 MAC 地址转换,例如,插入到端口 #n 的任何设备总是出现(对 Linux 计算机),就好像它有 MAC地址 foo:bar:baz:n,因此显示为 IPv6 地址 fe80::2foo:bar:baz:n。如果交换机像这样进行 MAC 地址转换,那么控制软件可以通过查看虚假 MAC 地址的最后一部分来确定设备连接到哪个端口。

    所以我的问题是,任何托管以太网交换机都支持这种行为吗?如果是这样,这个功能叫什么(所以我可以找到一个开关)?如果没有,是否有更好的方法来解决我应该考虑的这个问题?

    nat automated-testing ipv6 mac-address

    1
    推荐指数
    1
    解决办法
    1956
    查看次数