[linux]mount与nfs挂载简介

2023-05-16

文章目录

    • 挂载mount
      • 目录间挂载
      • 卸载与fuser
      • fstab
      • NFS Server
        • 配置
        • 命令
      • NFS client

mount用于挂载设备:

  • 挂载分区:mount /dev/sdb1 /data
  • 文件夹间:mount --bind /ori /data;data文件将被ori中遮盖。

挂载mount

mount用于挂载Linux系统下的分区或文件:
mount [-fv] [-t vfstype] [-o options] device {mounted-dir}

  • f:并不执行实际挂上的动作,而是模拟整个挂上的过程(常用于排错);一般与一起用;
  • v:显示较详细信息;
  • vfstype指定文件系统类型(不指定时,系统会自动获取正确的类型)
    • 光盘或光盘镜像:iso9660
    • DOS fat16文件系统:msdos
    • Windows 9x fat32文件系统:vfat
    • Windows NT ntfs文件系统:ntfs
    • Mount Windows文件网络共享:smbfs
    • UNIX(LINUX) 文件网络共享:nfs(一般要指定)
  • options:挂载方式:
    • loop:用来把一个文件当成硬盘分区挂接上系统
    • ro:采用只读方式挂接设备
    • rw:采用读写方式挂接设备
    • async:非同步模式;
    • sync:在同步模式下执行;
    • defaults: 使用预设的选项rw, suid, dev, exec, auto, nouser, and async
    • remount:将已挂载的设备重新用不同的方式挂载;例如原先只读的,重新挂载为读写模式。

mount -a [-fFv] [-t vfstype]:挂载/etc/fstab文件中所有条目。

  • F:为每一个mount动作产生一个进程负责执行;

目录间挂载

通过--bind可挂载目录(把data目录挂载到mounted下);
mount --bind {data-dir} {mounted-dir}

通过修改/etc/fstab可实现开机自动挂载(类型为none,参数中添加bind):
{data-dir} {mounted-dir} none defaults,bind 0 0

卸载与fuser

通过umount卸载:umount {mounted-dir}

当显示忙时,可通过fuser查看占用进程:

fuser option  {mounted-dir}

# 查看使用80端口的程序
fuser -v -n tcp 80
# 查看占用进程
fuser -m -v /dev/sdb1
  • -k:杀掉访问文件的进程。如果没有指定-signal就会发送SIGKILL信号。
  • -i:杀掉进程之前询问用户,如果没有-k这个选项会被忽略。
  • -l:列出所有已知的信号名称。
  • -m:name 指定一个挂载文件系统上的文件或者被挂载的块设备(名称name)。这样所有访问这个文件或者文件系统的进程都会被列出来。如果指定的是一个目录会自动转换成"name/",并使用所有挂载在那个目录下面的文件系统。
  • -n:space 指定一个不同的命名空间(space).这里支持不同的空间文件(文件名,此处默认)、tcp(本地tcp端口)、udp(本地udp端口)。对于端口, 可以指定端口号或者名称,如果不会引起歧义那么可以使用简单表示的形式,例如:name/space (即形如:80/tcp之类的表示)。
  • -u:在每个PID后面添加进程拥有者的用户名称。
  • -v:详细模式。输出似ps命令的输出,包含PID,USER,COMMAND等许多域,如果是内核访问的那么PID为kernel. -V 输出版本号。

fstab

/etc/fstab存储着挂载信息;包含了如下字段,通过空格或 Tab 分隔:

<file system>	<dir>	<type>	<options>	<dump>	<pass>
  • <file systems>:要挂载的分区或存储设备.
  • <dir>:挂载位置。
  • <type>:要挂载设备或是分区的文件系统类型,支持许多种不同的文件系统:ext2,ext3,ext4,reiserfs,xfs,jfs,smbfs,iso9660,vfat,ntfs,swap及auto。设置成auto类型,mount命令会猜测使用的文件系统类型。
  • <options>:挂载时使用的参数,参见mount部分说明。
  • <dump>:dump工具通过它决定何时作备份(允许的数字是0和1):0 表示忽略, 1 则进行备份。
  • <pass>:fsck决定需要检查的文件系统的检查顺序(允许的数字是0, 1, 和2):根目录应当获得最高的优先权1;其它所有需要被检查的设备设置为2;0表示不会被fsck检查。

把sdb1盘挂载到bigdisk下;并把其下的data挂载到/data目录

/dev/sdb1  /bigdisk ext4 defaults 0 0
/bigdisk/data  /data none defaults,bind 0 0

##NFS
NFS用于通过网络分享文件/文件夹。

NFS Server

安装服务端:
apt install nfs-kernel-server

配置

Server共享文件的配置在/etc/exports文件中;

# <dir> [可访问终端 (选项)] [可访问终端2(选项)]
/home   *.hostname.com(rw,sync,no_subtree_check)
/data   *(rw,async,no_subtree_check,no_root_squash)
  • 若使用fsid,则必须不同,否则只有第一条会生效;
  • 对于nfs格式,必须使用fsid;

可访问终端用于指定哪些机器可访问共享目录:

分类说明
指定IP地址192.168.1.1
指定网段192.168.0.0/24 192.168.0.0/255.255.255.0
指定域名study.example.com
指定域名段*.example.com

配置选项(选项间通过逗号分割):

参数描述
ro/rw设置输出目录只读/读写
all_squash客户端访问账号,均映射为NFS服务服务端匿名用户
root_squash客户端使用root账号访问,将映射为匿名用户
no_root_squash客户端使用root账号访问,则对该共享目录具有root权限
anonuid=xxx为匿名用户指定本地用户ID(UID=xxx);
anongid=xxx为匿名用户指定本地用户组ID(GID=xxx);
secure限制客户端只能从小于1024的tcp/ip端口连接nfs服务器(默认设置);
insecure允许客户端从大于1024的tcp/ip端口连接服务器;
sync将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性;
async将数据先保存在内存缓冲区中,必要时才写入磁盘;
wdelay检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率(默认设置);
no_wdelay若有写操作则立即执行,应与sync配合使用;
subtree若输出目录是一个子目录,则nfs服务器将检查其父目录的权限(默认设置);
no_subtree即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率;

命令

修改配置后通过exportfs -arv命令生效:
参数:

  • -a: 全部挂载或卸载 /etc/exports中的内容
  • -r: 重新读取/etc/exports 中的信息 ,并同步更新/etc/exports、/var/lib/nfs/xtab
  • -u: 卸载单一目录(和-a一起使用为卸载所有/etc/exports文件中的目录)
  • -v: 在export的时候,将详细的信息输出到屏幕上。

查看命令:

systemctl daemon-reload
systemctl restart nfs-server

# 查询本机nfs共享目录情况
showmount -e localhost 
# 查询本机共享目录连接情况
showmount -a localhost

其他配置文件:

  • /var/lib/nfs/rmtab中对应客户端mount的条目
  • /var/lib/nfs/etab记录中/etc/exports解析后的结果

NFS client

安装客户端:
apt install nfs-common

安装好客户端后通过mount命令加载:

mount -t nfs 192.168.1.10:/home /mount_home/

mount -t nfs -o nfsvers=3,sec=sys 192.168.1.10:/data /mount_data
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[linux]mount与nfs挂载简介 的相关文章

  • 我应该使用哪个 Linux 发行版作为 Xen 主机? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我为家庭办公室订购了一台服务器 我想用 Xen 对其进行分区 我认为这将使事情保持干净并且更容易维护 我将运行 MySQL PostgreSQL
  • 套接字:监听积压并接受

    listen sock backlog 在我看来 参数backlog限制连接数量 这是我的测试代码 server initialize the sockaddr of server server sin family AF INET ser
  • 将数组传递给函数名称冲突

    Specs GNU bash 版本 3 1 17 无法升级 Premise 我一直在摆弄数组 我想知道是否有任何方法可以让函数的本地变量与所述函数外部的数组同名 Example 在下面的示例中 我将尝试显示该问题 Working bin b
  • 如何用X11复制到剪贴板?

    使用 OS X 上的框架 我可以使用以下命令将 PNG 复制到粘贴板 在 C 中 显然我可以将 NSPasteboard 与 Cocoa 一起使用 include
  • gethostbyname() 或 getnameinfo() 如何在后台工作?

    How gethostbyname or getnameinfo 在后台工作 include
  • 如何让 clangd 转向 c++20

    当没有其他信息时 如何让 clangd 回退到 c 20 例如 在第一次构建之前 cmake 可以生成一个 这是在带有最新 LLVM 的 Arch Linux 上 这是通过 Emacs LSP 运行的 但这应该没有什么区别 你可以加 Com
  • 如何以编程方式从Linux中的进程名称获取进程ID

    在我的项目中 我们使用 ACE 自适应通信环境 中间件来编写可在 Windows 和 Linux 上运行的独立于操作系统的代码 要求是从进程名称中获取进程 ID 由于 ACE 不支持这一点 因此我们必须使用特定于平台的宏来分离 Window
  • linux x86 汇编语言 sys_read 调用的第一个参数应为 0 (stdin)

    我正在编写一个简单的汇编程序来从标准输入读取 如 scanf 这是我的代码 section bss num resb 5 section txt global start start mov eax 3 sys read mov ebx 0
  • 从 TypeScript 运行任何 Linux 终端命令?

    有没有办法直接从 TypeScript 类中执行 Linux 终端命令 这个想法是做类似的事情 let myTerminal new LinuxTerminal let terminalResult myTerminal run sudo
  • sleep 0 有特殊含义吗?

    我看到很多用法sleep 0在我的一个客户项目中 代码看起来像这样 while true sleep 0 end 阅读一些像这样的答案this https stackoverflow com questions 3727420 signif
  • 无需 cron 在后台发送邮件

    我想知道是否有一种方法可以运行 PHP 循环 以便在后台向订阅者发送几百封电子邮件 我的目标是格式化新闻通讯 单击发送 然后关闭浏览器或更改页面 当然 发送电子邮件的实际过程将在后台运行 不会因浏览器关闭而中断 我知道这可以通过 cron
  • Linux 桌面快捷方式和安装图标

    我需要添加什么到我的 spec文件来创建桌面快捷方式并在安装过程中为快捷方式分配一个图标 rpm 如果需要脚本 一个示例将非常有帮助 您在 Linux 下使用 desktop 文件作为图标 图标放置的位置取决于您使用的发行版和桌面环境 由于
  • 在 /dev/input/eventX 中写入事件需要哪些命令?

    我正在开发一个android需要将触摸事件发送到 dev input eventX 的应用程序 我知道C执行此类操作的代码结构如下 struct input event struct timeval time unsigned short
  • 如何使用 sed 仅删除双空行?

    我找到了这个问题和答案 https stackoverflow com questions 4651591 howto use sed to remove only triple empty lines关于如何删除三重空行 但是 我只需要对
  • arm-linux-gnueabi 编译器选项

    我在用 ARM Linux gnueabi gcc在 Linux 中为 ARM 处理器编译 C 程序 但是 我不确定它编译的默认 ARM 模式是什么 例如 对于 C 代码 test c unsigned int main return 0x
  • SONAR - 使用 Cobertura 测量代码覆盖率

    我正在使用声纳来测量代码质量 我不知道的一件事是使用 Cobertura 测量代码覆盖率的步骤 我按照以下步骤操作http cobertura sourceforge net anttaskreference html http cober
  • 在 Linux 上的 Python 中使用受密码保护的 Excel 工作表

    问题很简单 我每周都会收到一堆受密码保护的 Excel 文件 我必须解析它们并使用 Python 将某些部分写入新文件 我得到了文件的密码 当在 Windows 上完成此操作时 处理起来很简单 我只需导入 win32com 并使用 clie
  • 并行运行 make 时出错

    考虑以下制作 all a b a echo a exit 1 b echo b start sleep 1 echo b end 当运行它时make j2我收到以下输出 echo a echo b start a exit 1 b star
  • 如何模拟ARM处理器运行环境并加载Linux内核模块?

    我尝试加载我的vmlinux into gdb并使用 ARM 内核模拟器 但我不明白为什么我会得到Undefined target command sim 这是外壳输出 arm eabi gdb vmlinux GNU gdb GDB 7
  • QFileDialog::getSaveFileName 和默认的 selectedFilter

    我有 getSaveFileName 和一些过滤器 我希望当用户打开 保存 对话框时选择其中之一 Qt 文档说明如下 可以通过将 selectedFilter 设置为所需的值来选择默认过滤器 我尝试以下变体 QString selFilte

随机推荐