在 Fedora 17 下,如何强制特定应用程序安装在特定硬盘驱动器上?

0 linux

我有一个 Fedora 17 系统,其中包含三 (3) 个硬盘 [/dev/sda、/dev/sdb 和 /dev/sdc]。

/dev/sda 磁盘是我系统的“引导驱动器”。我已将系统设置为自动挂载 /dev/sdb 和 /devsdc。我有一个数据库应用程序 [MySQL],我只想安装在 /dev/sdb 上,但我不知道如何实现。[我打算使用 /dev/sdc 作为系统备份的位置。]

有人会告诉我如何实现这一目标吗?在 Windows 7 下(例如)这个任务是微不足道的,但我从未见过任何 Linux 文档。预先感谢您的帮助。

vor*_*aq7 7

不要太直率,但是您所知道的关于磁盘存储的一切都是错误的!
(或者至少基于 Windows 从 DOS 继承而来的从根本上被破坏的范式,DOS 从 CP/M 继承了它)。


对 Unix 文件系统的简要且非常不完整的介绍

在用户/文件系统级别,Unix 并不关心它使用的是什么物理设备。只有一个真正伟大而丰富的目录层次结构(树),以/(root)为根,万物都生活在它之下。

文件系统是在磁盘设备(/dev/sda1/dev/sda2/dev/sdb1等)上创建的,并安装在您想要逻辑访问它们的位置。

例如,/dev/sda1(Windows 驱动器C:,第一个硬盘)可能安装在/(根)。
然后,您可能已经/dev/sda2挂载了/usr包含所有“userland”程序的/dev/sda3at ,并挂载了/home包含所有用户主目录的at 。 /dev/sdb1可能会挂载/var以保存日志文件,因此它们不会填满您的启动驱动器等。

物理结构(哪些磁盘/分区与哪些挂载点相关联)是您在构建系统时根据预计的需求/增长决定的。
逻辑结构(目录名称和其中的内容)是标准化的,并记录在您的系统手册(hier手册页 -- hier(7) from a Linux system来自 BSD 系统)中。

您可以通过运行以下mount命令查看哪些分区(文件系统)安装在何处:

[mgraziano@monitor ~]$ mount
/dev/da0s1a on / (ufs, local)
devfs on /dev (devfs, local)
/dev/da0s1h on /home (ufs, local, soft-updates)
/dev/da0s2d on /opt (ufs, local, soft-updates)
/dev/da0s1g on /tmp (ufs, local, soft-updates)
/dev/da0s1e on /usr (ufs, local, soft-updates)
/dev/da0s1f on /usr/local (ufs, local, soft-updates)
/dev/da1s1d on /usr/local/pgsql/data (ufs, local, soft-updates)
/dev/da3s1d on /usr/local/pgsql/data/pg_xlog (ufs, local, soft-updates)
/dev/da2s1d on /usr/local/pgsql/data/xlog_archive (ufs, local, soft-updates)
/dev/da0s1d on /var (ufs, local, soft-updates)
Run Code Online (Sandbox Code Playgroud)

您可以使用以下df命令获取更多信息(如可用空间):

[mgraziano@monitor ~]$ df -h
Filesystem     Size    Used   Avail Capacity  Mounted on
/dev/da0s1a      2G     73M    1.7G     4%    /
devfs          1.0k    1.0k      0B   100%    /dev
/dev/da0s1h     18G    6.3M     16G     0%    /home
/dev/da0s2d     63G    7.4M     58G     0%    /opt
/dev/da0s1g      2G     14k    1.8G     0%    /tmp
/dev/da0s1e    9.7G    810M    8.1G     9%    /usr
/dev/da0s1f     14G    1.9G     11G    14%    /usr/local
/dev/da1s1d    266G     21G    223G     9%    /usr/local/pgsql/data
/dev/da3s1d    130G    128M    120G     0%    /usr/local/pgsql/data/pg_xlog
/dev/da2s1d    266G    2.1G    242G     1%    /usr/local/pgsql/data/xlog_archive
/dev/da0s1d    9.7G    308M    8.6G     3%    /var
Run Code Online (Sandbox Code Playgroud)

上面的结果来自FreeBSD系统,所以设备名称不同,但是输出的一般格式是一样的。


那么你的问题的答案是什么?——“你想错了。”

当您在 Unix 系统上安装 MySQL 之类的软件包时,它(希望)会遵守hier文档中的约定。例如:

  • MySQL的配置文件大概会进去 /etc/mysql/
  • MySQL 数据库文件可能会进入 /var/db/mysql/
  • MySQL 客户端二进制文件可能会安装为 /usr/bin/mysql
  • MySQL 转储程序可能会安装为 /usr/sbin/mysqldump
  • MySQL 守护进程(数据库服务器程序)可能是 /usr/sbin/mysqld
  • 可能会安装启动脚本,/etc以便在系统启动时启动数据库。

对于安装(和用户)而言,重要的是文件系统层次结构中的逻辑位置。底层物理磁盘的概念被完全抽象掉了(除非空间不足,并且假设您(系统管理员)已经使分区足够大以容纳正在安装的内容)。

Unix 文件系统提供的抽象有很多好处,其中包括能够覆盖初始分区中的错误。
例如,如果/var您系统上的分区只有 10GB,但您希望 MySQL 存储 100GB 的数据,您可能会出去购买一个新的硬盘驱动器,安装它并挂载它,/var/db/mysql以便您有足够的空间容纳您的数据库。
举个例子,看看df我上面提供的输出 - /usr/local/pgsql/data(我的 Postgres 数据库目录)驻留在一个单独的、更大的分区上/usr/local(它本身与 分开/usr)。