Linux ルート ファイル システムの秘密
Linux は、サーバー、デスクトップ、組み込みデバイスなどのさまざまな分野で広く使用されている、オープンソースでポータブルなカスタマイズ可能なオペレーティング システムです。 Linux の中核はカーネルであり、ハードウェア リソースの管理と基本サービスの提供を担当します。ただし、カーネルは独立したエンティティではなく、さまざまなデータやプログラムを保存しアクセスするためにファイル システムを必要とします。ファイル システムは、ファイルを整理および管理する方法であり、ファイルの名前、場所、属性、権限、その他の情報を定義します。 Linux には、ext4、xfs、btrfs など、さまざまな種類のファイル システムがあり、それぞれに独自の特徴と利点があります。ただし、すべてのファイル システムの中に、Linux システムの基盤および中核となる特別なファイル システムがあり、それがルート ファイル システム (rootfs) です。では、ルート ファイル システムとは何でしょうか?それは何をするためのものか?どのように作成され、管理されているのでしょうか?この記事では、次の側面から質問に答えます:
1. ルート ファイル システム
ファイル システムは、ディスク (光ディスク、フロッピー ディスク、フラッシュ ディスク、その他のストレージ デバイスを含む) またはパーティションに含まれるディレクトリ構造です。該当するディスク デバイスには 1 つ以上のファイル システムを含めることができます。ファイル システムをマウントするには、最初にファイル システムをマウントする必要があります。ファイル システムをマウントするには、マウント ポイントを指定する必要があります。
注: 私たちのアプリケーション開発では、開発ボードを購入すると、メーカーから既製のルート ファイル システムとブートローダーが提供されます。必要に応じて、新しいルート ファイルを最初から作成せずにコマンドを変更できます。ただし、ここでの作成プロセスにより、Linux ファイル システムについてより深く理解できるようになります。
2. メイン ルート ファイル システム
* Linux では rootfs は必須です。 PC は主に RAM ディスクを実装し、ルート ファイル システムを HD (ハードディスク、ハード ディスク) に直接マウントします。組み込みシステムは通常、HD からではなくフラッシュから起動します。最も単純な方法は、rootfs を RAM の RAMDisk にロードすることです。少し複雑です。 1 つはフラッシュから Cramfs を直接読み取る方法で、より複雑な方法はフラッシュ上にパーティションを作成して JFFS2 などのファイル システムを構築する方法です。
* RAMDisk は、準備された rootfs を圧縮してフラッシュに書き込みます。起動時に、ブートローダーはそれを RAM にロードし、解凍して、/ にマウントします。この方法は操作が簡単ですが、RAM 内のファイル システムは圧縮されていないため、多くの組み込みシステムでは希少なリソースである RAM が必要です。
ramdisk はメモリ スペースを使用してハードディスク パーティションをシミュレートします。Ramdisk は通常、ディスク ファイル システム圧縮を使用し、フラッシュに保存されます。システムの初期化中に、SDRAM に解凍され、ルート ファイル システムにマウントされます。Linux システムでは、ramdisk には1 つはフォーマットとロードが可能で、Linux カーネル 2.0/2.2 ですでにサポートされていますが、欠点はサイズが固定であることです。もう 1 つは 2.4 カーネルでのみサポートされ、ramfs を通じて実装されます。フォーマットすることはできませんが、使いやすく、必要な容量に応じてサイズが増減するため、現在 Linux で一般的に使用されている RAM ディスク技術です。
* initrd は RAMDisk のフォーマットです。カーネル 2.4 より前は、image-initrd でした。カーネル 2.5 では cpio-initrd が導入されました。これにより、Linux の起動プロセスが大幅に簡素化され、Linux の基本哲学「シンプルに、愚かにせよ」に準拠しました ( KISS) ただし、cpio-initrd は新しい形式であるため、十分にテストされておらず、Image-initrd は主に組み込み Linux で使用されています。
* Cramfs は Linus によって書かれた非常にシンプルなファイル システムで、圧縮率が高く、RAM にロードせずにフラッシュから直接実行することもできるため、RAM を節約できます。ただし、Cramfs は読み取り専用なので、実行時に変更が必要なディレクトリ (/etc、/var、/tmp など) には不便なので、これらのディレクトリは ramfs などの書き込み可能な fs にするのが一般的です。
* SquashFS は Cramfs の拡張機能です。 Cramfs のいくつかの制限を克服し、フラッシュと RAM の使用に関しても利点があります。ただし、開発者によると、パフォーマンスの点では Cramfs ほど優れていない可能性があります。これは新しいアプローチでもあり、組み込みシステムに採用する前にさらなるテストが必要になります。
3.Ramdisk の作成
RAMDiskの作成方法は次のとおりです。
(1) PC の Linux OS 環境で、ブロックデバイスに仮想化できるファイルを生成します (ファイル名は init.img とする)。
bs*count はブロックデバイスのサイズ (単位: バイト) init.img ファイルを生成した後、ファイルをフォーマットする必要があります。
リーリー(2) 新しいフォルダー ram を作成し、init.img を ram ディレクトリに添付します。
$ mkdir ram $ mount init.img ram/ -o loop
这时,读写ram目录,等效于读写init.img文件。用户可以将根文系统所需的文件写入到ram目录中。往ram目录写完文件以后,还需要使用umount ram命令卸载init.img,才能将已写入的文件保存到init.img中。
(3)添加完毕,需要umount ram
4.Cramfs制作
CramFS(Compressed Rom File System)是Linux Torvalds在Transmeta任职时,所参与开发的文件系统。它是针对Linux内核2.4之后的版本所设计的一种新型只读文件系统,采用了zlib 压缩,压缩比一般可以达到1:2,但仍可以作到高效的随机读取,Linux系统中,通常把不需要经常修改的目录压缩存放,并在系统引导的时候再将压缩文件 解开。因为Cramfs不会影响系统的读取文件的速度,而且是一个高度压缩的文件系统。因此非常广泛应用于嵌入式系统中。
在嵌入式的 环境之下,内存和外存资源都需要节约使用。如果使用RAMDISK方式来使用文件系统,那么在系统运行之后,首先要把Flash上的映像文件解压缩到内存 中,构造起RAMDISK环境,才可以开始运行程序。但是它也有很致命的弱点。在正常情况下,同样的代码不仅在Flash中占据了空间(以压缩后的形式存 在),而且还在内存中占用了更大的空间(以解压缩之后的形式存在),这违背了嵌入式环境下尽量节省资源的要求。
使用CramFS文件 系统就是一种解决这个问题的方式。CramFS是一个压缩格式的文件系统,它并不需要一次性地将文件系统中的所有内容都解压缩到内存之中,而只是在系统需 要访问某个位置的数据的时候,马上计算出该数据在CramFS中的位置,将它实时地解压缩到内存之中,然后通过对内存的访问来获取文件系统中需要读取的数 据。CramFS中的解压缩以及解压缩之后的内存中数据存放位置都是由CramFS文件系统本身进行维护的,用户并不需要了解具体的实现过程,因此这种方 式增强了透明度,对开发人员来说,既方便,又节省了存储空间。
但是Cramfs也有其缺点:延迟、小于16MB、不支持写,只支持PAGE_CREATE_SIZE=4096的内核。
制作的命令:(root文件夹中存放着文件系统)
#mkcramfs root cramfs.img
5.其他根文件系统的制作
制作yaffs文件系统: mkyaffsimage myroots myroots.img 制作squashfs: mksquashfs $(FS_DIR) $(FS_NAME) -noappend -be -lzma -no-fragments –noI
6.BusyBox编译制作
建立目标板空根目录文件夹及根目录下的文件夹:
[root@190 friendly-arm]# mkdir myroots [root@190 friendly-arm]#pwd /friendly-arm/myroots [root@190 friendly-arm]#cd myroots [root@190 myroots]# mkdir bin sbin usr lib dev mnt opt root etc home proc tmp var [root@190 myroots]# mkdir etc/init.d
进入etc/init.d目录下,建立一个脚本文件,并命名为rcS,用gedit打开,添加如下内容:
#! /bin/sh PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin: runlevel=S prevlevel=N umask 022 export PATH runlevel prevlevel # # Trap CTRL-C &c only in this shell so we can interrupt subprocesses. # trap ":" INT QUIT TSTP
创建 dev 中的节点
如果使用“linux 2.6.xx”的内核,应该事先创建节点“console”、“null”。否则在系统启动时内容会提示以下错误:
Warning: unable to open an initial console. Kernel panic - not syncing: Attempted to kill init!
创建节点的命令如下:
# mknod dev/console c 5 1 # mknod dev/null c 1 3 移植Busybox:
进入到压缩文件存放的目录下,并解压。然后进入解压后的busybox目录文件夹,随后配置busybox 。
[root@190 busybox-1.2.0]# make menuconfig
由于每个版本的配置选项组织有所不同。不管怎样,我们注意以下选项就行了:
1) Support for devfs 2) Build BusyBox as a static binary ( no shared libs ) //将busybox编译成静态链接 3) Do you want to build busybox with a Cross Compile? (/usr/local/arm/3.3.2/bin/arm-linux-) Cross Compile prefix //指定交叉编译器 4) init 5) Support reading an inittab file //支持init读取/etc/inittab 配置文件 6) (X) ash选中ash //建立的rcS脚本才能执行 7)ash 8)cp cat ls mkdir mv //可执行命令工具的选择,自己看着办吧,需要用到的就选上 9) mount 10) umount 11) Support loopback mounts 12) Support for the old /etc/mtab file 13) insmod 14) Support version 2.2.x to 2.4.x Linux kernels 15) Support version 2.6.x Linux kernels 16) vi 17)don’t use user
以上内容必须选上,其他可按默认值;如果要支持其他功能,如网络支持等,可按需选择,英语不是很烂的话,这些都没有问题。
配置好之后,保存退出。然后对其编译和安装到刚才建立的根文件系统目录下:
[root@190 busybox-1.2.0] make TARGET_ARCH=arm CROSS=arm-linux- \ PREFIX=/friendly-arm/myroots/ all install
安装好之后,将相应的二进制文件拷贝到根文件系统相应的目录下:
拷贝一些管理员控制程序到/sbin目录下,最重要的就是要包含一个init命令;
拷贝应用程序运行时所需要的库到/lib,库文件可以从PC机上的交叉编译工具安装目录下拷贝,如libc-2.2.2.so、libcryt-2.2.2.so、libm-2.2.2.so、libutil-2.2.2.so等,为部分相应库建立快捷方式,提供一些应用程序按快 捷方式名称调用。值得注意的是C库要采用C库的版本glibc, glibc位于/lib/libc.so.6
上記の分析を通じて、ルート ファイル システムは Linux システムの重要な部分であり、Linux システムの起動と操作に必要な主要なファイルとディレクトリが含まれていることがわかります。ルート ファイル システムは通常、/ (ルート) ディレクトリの下にマウントされ、他のファイル システムのマウント ポイントを含めることができます。ルート ファイル システムは、さまざまな種類のファイル システム形式を使用でき、多数のツールを使用して作成および管理できます。たとえば、mkfs コマンドを使用してパーティションまたはデバイスをルート ファイル システムとしてフォーマットしたり、mount コマンドを使用してルート ファイル システムをマウントまたはアンマウントしたり、df コマンドを使用してルート ファイル システムの使用状況を表示したりできます。ファイルシステムなど。つまり、ルート ファイル システムは Linux システムの秘密であり、Linux システムに安定した柔軟な基盤を提供します。
以上がLinux ルート ファイル システムの秘密の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











DeepSeekは、Webバージョンと公式Webサイトの2つのアクセス方法を提供する強力なインテリジェント検索および分析ツールです。 Webバージョンは便利で効率的であり、公式ウェブサイトは包括的な製品情報、ダウンロードリソース、サポートサービスを提供できます。個人であろうと企業ユーザーであろうと、DeepSeekを通じて大規模なデータを簡単に取得および分析して、仕事の効率を向上させ、意思決定を支援し、イノベーションを促進することができます。

DeepSeekをインストールするには、Dockerコンテナ(最も便利な場合は、互換性について心配する必要はありません)を使用して、事前コンパイルパッケージ(Windowsユーザー向け)を使用してソースからコンパイル(経験豊富な開発者向け)を含む多くの方法があります。公式文書は慎重に文書化され、不必要なトラブルを避けるために完全に準備します。

世界をリードするデジタル資産交換であるOuyi Okxは、安全で便利な取引体験を提供するために、公式のインストールパッケージを開始しました。 OUYIのOKXインストールパッケージは、ブラウザに直接インストールでき、ユーザー向けの安定した効率的な取引プラットフォームを作成できます。インストールプロセスは、簡単で理解しやすいです。

Gate.ioは、インストールパッケージをダウンロードしてデバイスにインストールすることで使用できる人気のある暗号通貨交換です。インストールパッケージを取得する手順は次のとおりです。Gate.ioの公式Webサイトにアクセスし、「ダウンロード」をクリックし、対応するオペレーティングシステム(Windows、Mac、またはLinux)を選択し、インストールパッケージをコンピューターにダウンロードします。スムーズなインストールを確保するために、インストール中に一時的にウイルス対策ソフトウェアまたはファイアウォールを一時的に無効にすることをお勧めします。完了後、ユーザーはGATE.IOアカウントを作成して使用を開始する必要があります。

Bitgetは、スポット取引、契約取引、デリバティブなど、さまざまな取引サービスを提供する暗号通貨交換です。 2018年に設立されたこのExchangeは、シンガポールに本社を置き、安全で信頼性の高い取引プラットフォームをユーザーに提供することに取り組んでいます。 Bitgetは、BTC/USDT、ETH/USDT、XRP/USDTなど、さまざまな取引ペアを提供しています。さらに、この取引所はセキュリティと流動性について評判があり、プレミアム注文タイプ、レバレッジド取引、24時間年中無休のカスタマーサポートなど、さまざまな機能を提供します。

OKXとしても知られるOUYIは、世界をリードする暗号通貨取引プラットフォームです。この記事では、OUYIの公式インストールパッケージのダウンロードポータルを提供します。これにより、ユーザーはさまざまなデバイスにOUYIクライアントをインストールすることが容易になります。このインストールパッケージは、Windows、Mac、Android、およびiOSシステムをサポートします。インストールが完了した後、ユーザーはOUYIアカウントに登録またはログインし、暗号通貨の取引を開始し、プラットフォームが提供するその他のサービスを楽しむことができます。

LinuxターミナルでPythonバージョンを表示する際の許可の問題の解決策PythonターミナルでPythonバージョンを表示しようとするとき、Pythonを入力してください...

システムが再起動した後、UnixSocketの権限を自動的に設定する方法。システムが再起動するたびに、UnixSocketの許可を変更するために次のコマンドを実行する必要があります:sudo ...
