-
android kernel 启动以后怎么挂载文件系统, init.rc怎么启动服务开启脚
2012-07-08 16:40:16方法一: 将他们制作成文件系然后统烧写... 最后将该分区上的文件系统挂载到指定目录即可 请查看init.rc 就知道了 on emmc mkdir /system mkdir /data 0771 system system mkdir /persist 0771 syst方法一: 将他们制作成文件系然后统烧写到板子的存储分区上,
最后将该分区上的文件系统挂载到指定目录即可
请查看init.rc 就知道了
on emmc
mkdir /system
mkdir /data 0771 system system
mkdir /persist 0771 system system
devwait /dev/block/mmcblk0p12
mount ext3 /dev/block/mmcblk0p12 /system ro
devwait /dev/block/mmcblk0p13
exec /system/bin/e2fsck -p /dev/block/mmcblk0p13
mount ext3 /dev/block/mmcblk0p13 /data nosuid nodev
mount ext3 /dev/block/mmcblk0p14 /persist nosuid nodevon nand
mkdir /system
mkdir /data 0771 system system
mkdir /persist 0771 system system
# Mount /system rw first to give the filesystem a chance to save a checkpoint
mount yaffs2 mtd@system /system
#mount yaffs2 mtd@system /system ro remount
mount yaffs2 mtd@userdata /data nosuid nodev
mount yaffs2 mtd@persist /persist nosuid nodev从以上即可知道。
方法二:通过NFS将主机上的文件系统挂载到板子上
1. 板子上的 nfs 要启动起来(在kernl的文件系统有支持: /android/kernel/fs)
2. 首先定义一个执行mount的脚本,我把它位于/system/etc/mount_nfs.sh
如常见的工具通过busybox生成之后,可以通过以下方式挂载到指定的目录即可用
#!/system/bin/sh
/system/bin/busybox mount -o rw,nolock -t nfs 192.168.1.6:/nfs_srv /data/mnt而我们想在是要将文件系统 ramdisk, system, userdata挂载;
#!/system/bin/sh
out/target/product/littleton/root/ 内核需要使用的 initramfs
out/target/product/littleton/system 文件系统的系统分区
out/target/product/littleton/data/ 文件系统数据分区mount out/target/product/littleton/system/ /system
mount out/target/product/littleton/data/ /data而对于根文件系统ramdisk需要
Device Drivers ---> Block devices ---> [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
General setup ---> () Initramfs source file(s),回车然后输入initframfs目录的绝对路径.如:out/target/product/m1ref/root/
3. 通过服务启动该脚本
在init.rc中加入一个Service定义,定义如下:
service mount_nfs /system/etc/mount_nfs.sh
oneshot
disabled4. 修改init.rc
可以将mount 文件系统的几条命令修改掉
从方法二可以知道;要想开机后就做什么动作在init.rc中修改,如果是脚本则需要启动一个服务来启动它即可
-
android kernel 启动以后怎么挂载文件系统, init.rc怎么启动服务开启脚本
2011-07-21 19:03:47方法一: 将他们制作成文件系然后统烧写到板子的存储分区上, 最后将该分区上的文件系统挂载到指定目录即可 请查看init.rc 就知道了 on emmc mkdir /system mkdir /data方法一: 将他们制作成文件系然后统烧写到板子的存储分区上,
最后将该分区上的文件系统挂载到指定目录即可
请查看init.rc 就知道了
on emmc
mkdir /system
mkdir /data 0771 system system
mkdir /persist 0771 system system
devwait /dev/block/mmcblk0p12
mount ext3 /dev/block/mmcblk0p12 /system ro
devwait /dev/block/mmcblk0p13
exec /system/bin/e2fsck -p /dev/block/mmcblk0p13
mount ext3 /dev/block/mmcblk0p13 /data nosuid nodev
mount ext3 /dev/block/mmcblk0p14 /persist nosuid nodevon nand
mkdir /system
mkdir /data 0771 system system
mkdir /persist 0771 system system
# Mount /system rw first to give the filesystem a chance to save a checkpoint
mount yaffs2 mtd@system /system
#mount yaffs2 mtd@system /system ro remount
mount yaffs2 mtd@userdata /data nosuid nodev
mount yaffs2 mtd@persist /persist nosuid nodev从以上即可知道。
方法二:通过NFS将主机上的文件系统挂载到板子上
1. 板子上的 nfs 要启动起来(在kernl的文件系统有支持: /android/kernel/fs)
2. 首先定义一个执行mount的脚本,我把它位于/system/etc/mount_nfs.sh
如常见的工具通过busybox生成之后,可以通过以下方式挂载到指定的目录即可用
#!/system/bin/sh
/system/bin/busybox mount -o rw,nolock -t nfs 192.168.1.6:/nfs_srv /data/mnt而我们想在是要将文件系统 ramdisk, system, userdata挂载;
#!/system/bin/sh
out/target/product/littleton/root/ 内核需要使用的 initramfs
out/target/product/littleton/system 文件系统的系统分区
out/target/product/littleton/data/ 文件系统数据分区mount out/target/product/littleton/system/ /system
mount out/target/product/littleton/data/ /data而对于根文件系统ramdisk需要
Device Drivers ---> Block devices ---> [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
General setup ---> () Initramfs source file(s),回车然后输入initframfs目录的绝对路径.如:out/target/product/m1ref/root/
3. 通过服务启动该脚本
在init.rc中加入一个Service定义,定义如下:
service mount_nfs /system/etc/mount_nfs.sh
oneshot
disabled4. 修改init.rc
可以将mount 文件系统的几条命令修改掉
从方法二可以知道;要想开机后就做什么动作在init.rc中修改,如果是脚本则需要启动一个服务来启动它即可
-
详解挂载运行的docker容器中如何挂载文件系统
2021-01-10 23:21:01感觉最近很多人都在问docker相关的问题,关于怎么操作一个已经启动的docker容器的文件系统,首先我发现这非常困难,因为 mnt的命名空间。 为了登录进入一个已经启动的docker容器,我们需要这么做: 使用nsenter来在... -
Linux挂载文件系统后挂载点目录项dentry的联系
2019-11-02 22:17:18Linux内核挂载文件系统后目录项的联系 第一次写博客,水平难免有限,请各位见谅。 最近在看linux内核mount文件系统的相关内容,由此产生了一些疑惑,即在mount一个文件系统后,原有的目录项与被挂载的文件系统的根...第一次写博客,水平难免有限,请各位见谅。
最近在看linux内核mount文件系统的相关内容,由此产生了一些疑惑,即在mount一个文件系统后,原有的目录项与被挂载的文件系统的根目录dentry之间是如何联系的,vfs进行路径搜索的时候,是怎么知道该目录项被挂载了一个新的文件系统,新的文件系统又如何与挂载位置的目录项联系起来?通过程序验证后略知一二,特此记录。
本文分析基于linux内核4.4.198。
假设条件
- /tmp是一个挂载点
- /tmp上只挂载了一个文件系统
相关数据结构
// 查找dentry使用的函数 /** * vfs_path_lookup - lookup a file path relative to a dentry-vfsmount pair * @dentry: pointer to dentry of the base directory * @mnt: pointer to vfs mount of the base directory * @name: pointer to file name * @flags: lookup flags * @path: pointer to struct path to fill */ int vfs_path_lookup(struct dentry *dentry, struct vfsmount *mnt, const char *name, unsigned int flags, struct path *path) //该结构体是struct mount的一部分,一个struct mount实例代表一个挂载点 struct vfsmount { struct dentry *mnt_root; /* root of the mounted tree */ struct super_block *mnt_sb; /* pointer to superblock */ int mnt_flags; }; //表示路径 struct path { struct vfsmount *mnt; struct dentry *dentry; }; // 目录项 struct dentry { /* RCU lookup touched fields */ unsigned int d_flags; /* protected by d_lock */ seqcount_t d_seq; /* per dentry seqlock */ struct hlist_bl_node d_hash; /* lookup hash list */ struct dentry *d_parent; /* parent directory */ struct qstr d_name; struct inode *d_inode; /* Where the name belongs to - NULL is * negative */ unsigned char d_iname[DNAME_INLINE_LEN]; /* small names */ /* Ref lookup also touches following */ struct lockref d_lockref; /* per-dentry lock and refcount */ const struct dentry_operations *d_op; struct super_block *d_sb; /* The root of the dentry tree */ unsigned long d_time; /* used by d_revalidate */ void *d_fsdata; /* fs-specific data */ struct list_head d_lru; /* LRU list */ struct list_head d_child; /* child of parent list */ struct list_head d_subdirs; /* our children */ /* * d_alias and d_rcu can share memory */ union { struct hlist_node d_alias; /* inode alias list */ struct rcu_head d_rcu; } d_u; };
分析
通过遍历根目录"/“对应dentry(可以通过current->fs->root获得)的d_subdirs链表,能够找到一个名为"tmp"的dentry实例,注意这里的dentry名没有”/",通过该实例的d_flags成员变量可以知道该dentry被标记为"已mounted",但是该dentry不是一个root dentry,即该dentry的d_parent成员变量指向的是根目录"/"对应dentry而不是自身???
不是每个文件系统根目录的dentry的d_parent成员变量都指向自身的吗?继续往下分析–》
通过函数vfs_path_lookup,查找路径"/tmp/kaka",最后一个参数struct path *path被填充,可以通过path->mnt->mnt_root获得目标dentry所在文件系统的根目录,该目录名称为"/",经分析,这个dentry实例与vfs的根目录"/“不是一个东西,每个挂载在vfs上的文件系统,都有一个名为”/"对应的dentry,作为该文件系统的根目录。继续分析,该dentry的d_flags成员变量显示该dentry未被mounted,并且,该dentry是一个root dentry,即该dentry的d_parent成员变量指向的是自身。
原来,上面这个名为"tmp"的dentry和由path得到的名为"/“的dentry其实都代表的是一个路径即”/tmp",vfs查找路径的时候,通过根目录找到的名为"tmp"的dentry,会检查他的d_flags成员变量,发现该dentry为mmounted状态的话,会继续查找究竟是谁挂载在"tmp"这个目录项上了,找到后再继续往下找。
那么,究竟内核是怎么查找到名为"tmp"的dentry实例和由path得到的名为"/"的dentry实例直接存在关系的呢?通过查看struct dentry的定义,好像并没有找到一个成员变量能过将这两个实例联系在一起???还有,内核查找路径不是通过dentry结构的d_subdirs成员变量链表进行查找的吗?
继续分析发现,linux内核是通过二元组{dentry,mount}找到当前路径下的相关内容,或者通过look_up回调函数进行硬件读取查找;其中对于第一种方法,通过二元组{dentry,mount}获取相关hash结果,在对应散列表下搜索。对于上面的问题,内核代码vfs_path_lookup->filename_lookup->path_lookupat->link_path_walk->walk_component->lookup_fast->__follow_mount_rcu函数中有如下代码:
if (!d_mountpoint(path->dentry)) return !(path->dentry->d_flags & DCACHE_NEED_AUTOMOUNT); mounted = __lookup_mnt(path->mnt, path->dentry); /* * find the first mount at @dentry on vfsmount @mnt. * call under rcu_read_lock() */ struct mount *__lookup_mnt(struct vfsmount *mnt, struct dentry *dentry) { struct hlist_head *head = m_hash(mnt, dentry); struct mount *p; hlist_for_each_entry_rcu(p, head, mnt_hash) if (&p->mnt_parent->mnt == mnt && p->mnt_mountpoint == dentry) return p; return NULL; }
通过__lookup_mnt函数使得上述问题的两个dentry关联了起来。
值得一提的是,在函数vfs_path_lookup()中path变量作为一个buffer般的存在存储着中间变量,并被多次修改。
-
Docker运行nginx挂载文件及反向代理
2019-09-02 15:27:24在部署nginx时遇到了坑,最主要的问题是在挂载文件和文件夹的时候不知道怎么挂载,现总结如下: 1. 拉去nginx镜像 docker pull nginx 2. (关键)查看nginx镜像里面配置文件、日志等文件的具体位置,只有找到镜像...在部署nginx时遇到了坑,最主要的问题是在挂载文件和文件夹的时候不知道怎么挂载,现总结如下:
1. 拉去nginx镜像
docker pull nginx
2. (关键)查看nginx镜像里面配置文件、日志等文件的具体位置,只有找到镜像配置文件的路径,后面挂载文件和文件夹才能覆盖这些路径
- 以终端的方式打开镜像容器
docker exec -it nginx bash
- 找到镜像中nginx.conf配置文件
路径:/etc/nginx/nginx.conf
使用命令:cat /etc/nginx/nginx.conf 查看nginx.conf文件内容然后拷贝出来 - 找到default.conf配置文件
路径:/etc/nginx/conf.d/default.conf
用命令:cat /etc/nginx/conf.d/default.conf 查看default.conf文件内容然后拷贝出来 - 找到默认首页文件夹html
路径:/usr/share/nginx/html - 找到日志文件位置
路径:/var/log/nginx
然后退出容器终端 exit
3. nginx镜像启动容器mynginx并且挂载文件夹和文件到容器中
- 在Docker Desktop > Settings > Shared Drives 选中文件所在磁盘,如图 :
- 创建目录信息,结构如下
//4个文件夹 //放置nginx.conf文件,内容建议从nginx容器的终端中nginx.conf配置文件复制,这样子就保证了配置文件中的路径与镜像中配置文件的路径能保持一致 D:\docker\Nginx\data\nginx\conf //放置default.conf文件,内容建议从nginx容器的终端中default.conf配置文件复制,这样子就保证了配置文件中的路径与镜像中配置文件的路径能保持一致 D:\docker\Nginx\data\nginx\conf.d //首页页面 D:\docker\Nginx\data\nginx\html //日志信息 D:\docker\Nginx\data\nginx\logs
- html目录下新建index.html
<html> <head> <title>Mynginx</title> </head> <body> <h1>恭喜Docker搭建nginx成功,欢迎使用!</h1> </body> </html>
这里可能会存在编码问题导致页面乱码,在default.conf > server添加 charset ‘utf-8’ 可解决
4. 使用 nginx 镜像
docker run -d -p 80:80 --name nginx-web -v D:\docker\Nginx\data\nginx\html:/usr/share/nginx/html -v D:\docker\Nginx\data\nginx\conf/nginx.conf:/etc/nginx/nginx.conf -v /root/nginx/logs:/var/log/nginx -v D:\docker\Nginx\data\nginx\conf.d: /etc/nginx/conf.d nginx
命令说明:
- -p 80:80:将容器的80端口映射到主机的80端口(因此配置容器的nginx的监听端口时,一定要配置为80端口)
- –name nginx-web:将容器命名为nginx-web
- -v D:\docker\Nginx\data\nginx\html:/usr/share/nginx/html :将主机中当前目录下的html挂载到容器的html
- -v D:\docker\Nginx\data\nginx\conf/nginx.conf:/etc/nginx/nginx.conf:将主机中当前目录下的nginx.conf挂载到容器的/etc/nginx/nginx.conf
- -v /root/nginx/logs:/var/log/nginx:将主机中当前目录下的logs挂载到容器的/nginx
- -v D:\docker\Nginx\data\nginx\conf.d: /etc/nginx/conf.d:将主机中当前目录下的conf.d挂载到容器的/etc/nginx/conf.d
5. http://localhost:80 打开网页看看效果
6. 实现反向代理163网站
在conf.d下新建to163.conf文件,内容如下:
upstream uicps { server www.163.com; } server { listen 80; server_name localhost; root html; index index.html index.htm index.php; location / { proxy_pass http://uicps; proxy_redirect off; proxy_set_header Host www.163.com; # $host;不能使用$host变量 proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; proxy_max_temp_file_size 0; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffer_size 4k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; } # $host 和 $http_host 都是你访问 nginx 的时候的 host ,并不是你反代的那个 host }
打开浏览器输入server_name访问
7. 代理个人发布服务器的项目
在conf.d下新建server.person.conf文件
server { listen 80; server_name www.if404.com; access_log /var/log/nginx/if404.access.log main; error_log /var/log/nginx/if404.error.log error; location / { proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://宿主机IP:8080; } }
重启nginx,访问server_name即可。
-
Linux下如何挂载文件,并设置开机自动挂载
2020-12-03 13:35:38首先保证服务端安装了 ...那么,我要做的是 : 将192.168.50.85上面的/data/talk/下的所有文件以及文件夹 全部同步到192.168.50.83上面的/data/talk/下面 废话不多说,让我来带着小伙伴一起操作实现下吧.. -
进入docker容器中查看文件夹_详解挂载运行的docker容器中如何挂载文件系统
2020-12-29 21:37:49前言感觉最近很多人都在问docker相关的问题,关于怎么操作一个已经启动的docker容器的文件系统,首先我发现这非常困难,因为 mnt的命名空间。为了登录进入一个已经启动的docker容器,我们需要这么做:使用nsenter来... -
linux怎么挂载NFS(命令)
2019-03-06 19:54:17linux怎么挂载NFS(命令) linux如何使用NFS挂载文件系统 设备:一台服务器和一台客户端,这里我们把装在PC机上的RedHat作为服务器,而客户 端则是嵌入式linux开发板。 环境:开发板已启动,连接好串口和网线,串口... -
linux下怎么挂载U盘
2019-10-02 00:43:37一般来说linux系统会自动挂载u盘,如果是图形界面,你一插上u盘会自动弹出来文件夹。 如果是命令行界面 使用命令 fdisk -l (root下执行...一般u盘都是fat32格式 就是/dev/sdb1这个设备文件 挂载命令:mount -t vfa... -
liunx怎么挂载本地yum源
2018-12-19 21:36:13一、首先将linux操作系统的安装时的iso文件通过光盘或者U盘挂载到服务器上。 本文使用光盘挂载相关文件。 二、新建一个路径 mkdir /mnt/isofile 然后将iso文件挂载到该目录下。 mount -o loop /mnt/isofile/CentOS-... -
linux 挂载硬盘到根目录_Linux怎么挂载移动硬盘光盘U盘之案例分享
2021-01-22 13:47:02Linux怎么挂载移动硬盘光盘U盘之案例分享请关注本头条号,每天坚持更新原创干货技术文章。如需学习视频,请在微信搜索公众号“智传网优”直接开始自助视频学习1. mount命令简介本文主要讲解Linux上如何使用mount命令... -
vSphere Client 挂载文件 到虚拟机内服务器
2018-10-31 16:25:04想要往虚拟机中添加文件,怎么添加呢? Pl03是我要上传文件的主机 1、需要 UltraISO.exe 制作iso镜像 参考: 可以利用UltralSO制作iso文件。 方法: 1、在UltraISO主界面菜单点击文件--新建ISO光盘映像文件... -
进入docker容器中查看文件夹_Docker应用教程-挂载运行中的docker容器中挂载文件系统...
2020-12-29 04:23:25很多人可能都在问docker的问题,关于怎么操作一个已经启动的docker容器的文件系统,首先我发现这非常困难,因为 mnt的命名空间。为了登录进入一个已经启动的docker容器,我们需要这么做:使用nsenter来在临时挂载点... -
linux下怎么挂载U盘废弃
2016-07-27 20:13:08一般来说linux系统自动挂载u盘,如果是图形界面,你一插上u盘会自动弹...一般u盘都是fat32格式 就是/dev/sdb1这个设备文件 挂载命令:mount -t vfat /dev/sdb1 /mnt 如果u盘为NFTS格式 ,先安装ntfs-3g这个软件包: yum -
8s nfs 挂载文件_nfs工作原理介绍及如何部署nfs服务器
2021-01-11 20:29:06概述生产环境其他服务器需要读取xx.xx.xx.A服务器上的附件存储,需要以挂载的方式挂载上去后读取,但是怎么去实现挂载呢?下面分享下nfs工作原理和如何去部署nfs服务器的教程,大家可以参考下。NFS服务1、简介NFS 是... -
docker部署nginx并且挂载文件夹和文件操作
2021-01-08 23:28:40这段时间在研究docker,在部署nginx时遇到了坑,最主要的问题是在挂载文件和文件夹的时候不知道怎么挂载,经过反复实验以及查看网上的教程,先总结如下: 1首先pull下载nginx镜像包 docker pull nginx 2(关键)... -
安卓怎么挂载ntfs硬盘_Linux中挂载NTFS格式的硬盘
2020-12-21 08:58:27在很多时候,我们需要将文件拷贝到远程Linux主机上面,某些时候,网络比较给力,几个GB的文件传上去不怎么费力,但是几十个GB的文件呢?虽然也可以这样去做,但是,如果我们的权限够大,可以进机房直接拷贝数据到... -
linux,挂载自建的文件系统怎么没有什么变化?是不是进入挂载点就意味着切还了新的文件系统?
2015-12-17 10:46:20我挂载了自己建立RAID的文件系统,/dev/md1 (raid 5);reboot之后,没有感到和之前有有什么变化啊?怎么切换到新的/dev/md1系统呢? 是不是进入挂载点,就意味进入新的文件系统呢? -
根文件系统挂载过程
2017-01-07 21:56:00prepare_namespace挂载磁盘上的文件系统 题外话:启动引导程序怎么识别"/boot"分区(或者目录) 参考资料 注册挂载rootfs文件系统 首先是rootfs的注册和挂载,rootfs作为一切后续文件操作的基石。 start_... -
docker部署nginx并且挂载文件夹和文件
2018-05-30 10:18:32这段时间在研究docker,在部署nginx时遇到了坑,最主要的问题是在挂载文件和文件夹的时候不知道怎么挂载,经过反复实验以及查看网上的教程,先总结如下:1首先pull下载nginx镜像包docker pull nginx2(关键)查看... -
根文件系统制作与挂载
2020-08-17 20:17:48根文件系统挂载过程 https://www.cnblogs.com/shangye/p/6260471.html 目录 注册挂载rootfs文件系统 解压initramfs到rootfs中 prepare_namespace挂载磁盘上的文件系统 题外话:启动引导程序怎么识别"/boot... -
linux挂载u盘出错_linux怎么挂载U盘,发现linux不认识NTFS
2021-01-17 16:27:35本文包括两个部分:以只读方式mount NTFS文件系统;以读写方式mount NTFS文件系统;2. 只读Mount NTFS文件系统2.1. NTFS内核支持现在的Linux大多数发行版都支持NTFS文件系统。支持NTFS文件系统是Linux内核模块的特征... -
CentOS下挂载iso文件
2015-12-20 17:47:37当前位置: > ...以前在Windows下经常会使用这些ISO镜像文件,我们可以用虚拟光驱来加载,可在LINUX下就没那些工具了,那在Linux下要怎么做呢? 首先我们要把iso加载到一个目录,用的是。 mount -o -
nfs挂载根文件系统
2013-02-23 13:01:18由于原来的内核是用ATBOOT的方式下载的,不知道怎么传递参数(好像不能,网上查的nfs方式都是用U-boot的方式挂载的),因此决定用u-boot重新下载内核。 1.下载u-boot和内核 1.1编译内核 1.1.1由于板子光盘自 -
Linux文件挂载访问windows共享文件
2020-12-01 14:30:03最近使用虚拟机搭建了一个linux系统,由于不清楚怎么通过windows传给linux系统传文件,遂百度了一下,操作一番之后做了一个总结 首先要在windows下创建一个共享目录,在任何位置都可以,需要注意的是需要给文件夹... -
Red Hat 挂载 ntfs 文件格式
2016-11-10 19:31:17下面讲怎么挂载ntfs首先下载最新的ntfs-3ghttp://www.tuxera.com/community/ntfs-3g-download 这个下载我就不说了 在网站上找到最新的ntfs-3g 复制链接用 wget 下载下载前先安装gcc 不然会出现问题解压下载的软...