文件系统初始化与分享

文件系统初始化与分享,第1张

nextcloud中,一个用户可以将自己的目录或者文件分享给另外一个文件,任何一方对文件修改,对双方都是一致可见的。分享类似于文件系统中的软链接,其实指向的都是同一个节点。

在nextcloud中,分享的实现原理是挂载。如user1的文件file1分享给user2,则实际上是将文件/user1/files/file1 挂载到/user2/files/file1这个路径,这样,user2便能查看到file1这个文件,对这个文件的修改,也实际上是在修改/user1/files/file1这个文件。

分享的挂载是在nextcloud的文件系统初始化的时候执行的,在分享挂载的过程中,挂载点实际上是会变的,分享插件会检查挂载点是否可用,如果不可用则寻找一个父目录存在且文件路径不与已有文件重复的新路径挂载。

如file1指定的挂载点是dir/dir2/file1,但是用户把dir2删除了,那么分享插件就会将挂载点改成/file1,如果这个路径下已存在,则尝试"/file1 (2)"这个路径,失败则继续尝试。

分享挂载点自动迁移是一个隐形的坑,想要避免挂载点被迁移,就需要保证父目录存在。

也是因为如此,所以在nextcloud的文件系统初始化的过程中,存储实例的挂载是有先后顺序的。

在用户挂载的实现函数MountProviderCollection::addMountForUser()中,便可以看到,先挂载的非分享存储,后挂载分享。

也就是如此,在Home存储挂载之后,分享才能个基本的挂载点。如果有外部存储,或者自行提高的存储方式,分享也才能找到正确的挂载点,避免自动迁移到错误的目录下。

System V init启动过程

概括地讲,Linux/Unix系统一般有两种不同的初始化启动方式.

1) BSD system init

2) System V init

大多数发行套件的Linux使用了与System V init相仿的init也就是Sys V init,它比传统的BSD system init更容易且更加灵活。

System V init的主要思想是定义了不同的"运行级别(runlevel)"。通过配置文件/etc/inittab定义了系统引导时的运行级别, 进入或者切换到一个运行级别时做什么。每个运行级别对应于一个子目录/etc/rc.d/rcX.d。

每个rcX.d目录中都是一些以S或K开头的文件链接。这些链接指向的脚本都 可以接收start和stop参数,S开头的链接会传入start参数,一般是开启一项服务,K会传入stop参数,一般是停止某服务。

以下是一个大致的System V init过程:

(1)init 过程执行的第一个脚本是 /etc/rc.d/rc.sysinit,它主要做在各个运行级别中进行初始化工作,包括: 启动交换分区检查磁盘设置主机名检查并挂载文件系统加载并初始化硬件模块.

(2)执行缺省的运行级别模式。 这一步的内容主要在/etc/inittab中体现, inittab文件会告诉init进程要进入什么运行级别,以及在哪里可以找到该运行级别的配置文件.

(3)执行/etc/rc.d/rc.local脚本文件。 这也是init过程中执行的最后一个脚本文件,所以用户可以在这个文件中添加一些需要在登录之前执行的命令.

(4)执行/bin/login程序

注意:

System V init只是一种模式,每个系统初始化都有差异,但大体上不会相差太多。如busybox执行的第一个启动脚本就是/etc/init.d/rcS,而且不可以改变,与上面讲的不同。

LFS文件系统初始化示例

inittab文件

由下内容可以看出,最先执行的是/etc/rc.d/init.d/rc文件,给这个文件传入的参数是一个数字,rc会由传入的数字合成rcX.d目录的路径,然后执行其中的所有脚本链接。当然这只是一部分功能。

# Begin /etc/inittab

id:3:initdefault:

<em><strong>si::sysinit:/etc/rc.d/init.d/rc sysinit</strong></em>#可以设定初始化脚本

l0:0:wait:/etc/rc.d/init.d/rc 0

l1:S1:wait:/etc/rc.d/init.d/rc 1

l2:2:wait:/etc/rc.d/init.d/rc 2

...

ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now

su:S016:once:/sbin/sulogin

1:2345:respawn:/sbin/agetty tty1 9600

2:2345:respawn:/sbin/agetty tty2 9600

...

# End /etc/inittab

etc目录结构

只是一部分,有删减。

.

├── fstab

├── <em>inittab</em>

├── inputrc

├── profile

├── rc.d

│ ├── init.d

│ │ ├── checkfs

│ │ ├── cleanfs

...

│ │ ├── modules

│ │ ├── mountfs

│ │ ├── mountkernfs

│ │ ├── network

│ │ ├── rc#when boot, run.

│ │ ├── reboot

...

│ ├── rc0.d

│ │ ├── K80network ->../init.d/network

│ │ ├── K90sysklogd ->../init.d/sysklogd

│ │ ├── S60sendsignals ->../init.d/sendsignals

│ │ ├── S70mountfs ->../init.d/mountfs

│ │ ├── S80swap ->../init.d/swap

│ │ ├── S90localnet ->../init.d/localnet

│ │ └── S99halt ->../init.d/halt

│ ├── rc1.d

│ │ ├── K80network ->../init.d/network

│ │ └── K90sysklogd ->../init.d/sysklogd

│ ├── rc2.d

│ │ ├── K80network ->../init.d/network

│ │ └── K90sysklogd ->../init.d/sysklogd

│ ├── rc3.d

│ │ ├── S10sysklogd ->../init.d/sysklogd

│ │ └── S20network ->../init.d/network

│ ├── rc4.d

│ │ ├── S10sysklogd ->../init.d/sysklogd

│ │ └── S20network ->../init.d/network

│ ├── rc5.d

│ │ ├── S10sysklogd ->../init.d/sysklogd

│ │ └── S20network ->../init.d/network

│ ├── rc6.d

│ │ ├── K80network ->../init.d/network

│ │ ├── K90sysklogd ->../init.d/sysklogd

│ │ ├── S60sendsignals ->../init.d/sendsignals

│ │ ├── S70mountfs ->../init.d/mountfs

│ │ ├── S80swap ->../init.d/swap

│ │ ├── S90localnet ->../init.d/localnet

│ │ └── S99reboot ->../init.d/reboot

│ └── rcsysinit.d

│ ├── S00mountkernfs ->../init.d/mountkernfs

│ ├── S02consolelog ->../init.d/consolelog

│ ├── S05modules ->../init.d/modules

...

├── udev

│ ├── rules.d

│ │ └── 55-lfs.rules

│ └── udev.conf

└── vimrc

network脚本

#!/bin/sh

. /etc/sysconfig/rc

. ${rc_functions}

. /etc/sysconfig/network

case "${1}" in

start)

# Start all network interfaces

for file in ${network_devices}/ifconfig.*

do

interface=${file##*/ifconfig.}

# skip if $file is * (because nothing was found)

if [ "${interface}" = "*" ]

then

continue

fi

IN_BOOT=1 ${network_devices}/ifup ${interface}

done

stop)

# Reverse list

FILES=""

for file in ${network_devices}/ifconfig.*

do

FILES="${file} ${FILES}"

done

# Stop all network interfaces

for file in ${FILES}

do

interface=${file##*/ifconfig.}

# skip if $file is * (because nothing was found)

if [ "${interface}" = "*" ]

then

continue

fi

IN_BOOT=1 ${network_devices}/ifdown ${interface}

done

restart)

${0} stop

sleep 1

${0} start

*)

echo "Usage: ${0} {start|stop|restart}"

exit 1

esac

# End /etc/rc.d/init.d/network



电脑渣滓文件没有被清算,一朝一夕积聚过多的渣滓文件。

电脑硬件需求晋级,由于当今软件功用越来越初级,许多老式的电脑硬件达不到要求都会呈现电脑的状况。

电脑硬件灰尘太多,影响撒热风扇散热,招致硬件部分温度骤升,这样也会影响硬件的运转速度。比方显卡的假如风扇因灰尘过多而停转,不只会极大的影响散热招致电脑变卡,工夫一久甚至会烧坏当也是同一个道理。

需求清算磁盘碎片,普通是在开端菜单中,或许在“我的电脑”的属性里也可以找到,控制面板里应该也可以找到,但是清算工夫长


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11438782.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存