關於GlusterFS分佈式文件系統的相關理論知識能夠參考博文:GlusterFS分佈式文件系統羣集理論知識詳解
這裏就很少說了,實戰開始!!!node
實驗環境,如圖:
服務器的相關信息,如圖:
linux
在全部節點上執行如下操做:
開啓4臺虛擬機,按照表中添加相應的磁盤,並經過fdisk分區、mkfs格式化,建立相應的掛載目錄,並將格式化的磁盤掛載到相應的目錄中。最後根據實際狀況,能夠選擇修改/etc/fstab配合文件,使其永久生效。此步驟省略!!!若是有不明白的朋友,能夠參考博文:Linux系統磁盤管理(一)vim
在全部的節點服務器都須要執行一樣的如下操做:bash
[root@localhost ~]# systemctl stop firewalld [root@localhost ~]# systemctl disable firewalld Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service. Removed symlink /etc/systemd/system/basic.target.wants/firewalld.service. [root@localhost ~]# setenforce 0 [root@localhost ~]# vim /etc/sysconfig/selinux …………………… //省略部份內容 SELINUX=disable //若是是實驗環境選擇臨時關閉便可,爲了防止實驗環境重啓機器,建議修改成開機自動關閉
在全部的節點服務器上修改host配置文件,添加4個節點的解析,其中一個爲例:服務器
[root@localhost ~]# vim /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.1.1 node1 192.168.1.2 node2 192.168.1.3 node3 192.168.1.4 node4
全部節點服務器上都需安裝gluster軟件!
glusterfs相應的rpm包及相應軟件網盤連接:https://pan.baidu.com/s/1AuANEM5DZcTFpDqq6B-drA
提取碼:1xm1 app
複製提供的文件包gfsrepo到每一個節點上,刪除本來的yum倉庫配置文件,並建立一個新的yum倉庫配置文件指向gfsrepo目錄(絕對路徑),這個就詳細介紹了啊!dom
[root@localhost ~]# yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma //安裝glusterfs相應的軟件包
實驗環境能夠直接訪問互聯網環境,也能夠指向互聯網倉庫,或者本身下載百度網盤鏈接獲取資源!tcp
在全部節點上執行如下操做:分佈式
[root@localhost ~]# systemctl start glusterd [root@localhost ~]# systemctl enable glusterd Created symlink from /etc/systemd/system/multi-user.target.wants/glusterd. service to /usr/lib/systemd/system/glusterd.service.
只需在node1上執行如下操做便可!ide
[root@localhost ~]# gluster peer probe node2 peer probe: success. [root@localhost ~]# gluster peer probe node3 peer probe: success. [root@localhost ~]# gluster peer probe node4 peer probe: success. //由於是在node1上進行的操做,因此不須要添加node1
使用如下命令在每一個節點查看羣集狀態:
[root@localhost ~]# gluster peer status Number of Peers: 3 Hostname: node2 Uuid: 254f7760-2350-498d-a76c-3d729d0248b3 State: Peer in Cluster (Connected) Hostname: node3 Uuid: 4c05ad7a-1ada-431e-90c8-8b1c93391bb7 State: Peer in Cluster (Connected) Hostname: node4 Uuid: 9fb67f74-7354-46b3-9bbb-b5384418d216 State: Peer in Cluster (Connected) //不包括本機,Connected屬於正常現象,若是非正常將檢查host配置文件
這樣服務已經安裝完畢!剩下的就能夠建立各類捲進行測試了!
如下操做只需在其中一臺上操做便可!
建立完成任何卷啓動纔可以使用,不要忘記!
[root@localhost ~]# gluster volume create dis-volume node1:/e6 node2:/e6 force //建立分佈式卷,卷名爲dis-volume,使用node1的e6磁盤和node2的e6磁盤。 //沒有指定類型,默認建立的是分佈式卷! //force表示強制的意思,第一次能夠省略! volume create: dis-volume: success: please start the volume to access data [root@localhost ~]# gluster volume info dis-volume //查看dis-volume卷詳細信息 Volume Name: dis-volume Type: Distribute Volume ID: edad75f6-2a9e-4cc1-96ec-2ead3e87dc55 Status: Created Snapshot Count: 0 Number of Bricks: 2 Transport-type: tcp Bricks: Brick1: node1:/e6 Brick2: node2:/e6 Options Reconfigured: transport.address-family: inet nfs.disable: on [root@localhost ~]# gluster volume status dis-volume //查看dis-volume的狀態 Volume dis-volume is not started [root@localhost ~]# gluster volume start dis-volume //啓動dis-volume卷 volume start: dis-volume: success [root@localhost ~]# gluster volume status dis-volume Status of volume: dis-volume Gluster process TCP Port RDMA Port Online Pid ------------------------------------------------------------------------------ Brick node1:/e6 49152 0 Y 3438 Brick node2:/e6 49152 0 Y 3293 Task Status of Volume dis-volume ------------------------------------------------------------------------------ There are no active volume tasks
[root@localhost ~]# gluster volume create stripe-volume stripe 2 node1:/d5 node2:/d5 force //指定類型爲stripe,數值爲2,並且後面跟了2個Brick Server,因此建立的是條帶卷。 volume create: stripe-volume: success: please start the volume to access data [root@localhost ~]# gluster volume info stripe-volume Volume Name: stripe-volume Type: Stripe Volume ID: f0aae8c1-4f89-40f7-abd5-a3083e4d588a Status: Created Snapshot Count: 0 Number of Bricks: 1 x 2 = 2 Transport-type: tcp Bricks: Brick1: node1:/d5 Brick2: node2:/d5 Options Reconfigured: transport.address-family: inet nfs.disable: on [root@localhost ~]# gluster volume start stripe-volume volume start: stripe-volume: success
[root@localhost ~]# gluster volume create rep-volume replica 2 node3:/d5 node4:/d5 force //指定類型爲replica,數值爲2,並且後面跟了2個Brick Server ,因此建立的複製卷 volume create: rep-volume: success: please start the volume to access data [root@localhost ~]# gluster volume info rep-volume Volume Name: rep-volume Type: Replicate Volume ID: 1a1a979f-5bed-4541-b238-22b4348bd604 Status: Created Snapshot Count: 0 Number of Bricks: 1 x 2 = 2 Transport-type: tcp Bricks: Brick1: node3:/d5 Brick2: node4:/d5 Options Reconfigured: transport.address-family: inet nfs.disable: on [root@localhost ~]# gluster volume start rep-volume volume start: rep-volume: success
[root@localhost ~]# gluster volume create dis-stripe stripe 2 node1:/b3 node2:/b3 node3:/b3 node4:/b3 force //指定類型爲stripe,數值爲2,並且後面跟了4個Brick Server,是2的2倍,因此建立的是分佈式條帶卷 volume create: dis-stripe: success: please start the volume to access data [root@localhost ~]# gluster volume info dis-stripe Volume Name: dis-stripe Type: Distributed-Stripe Volume ID: 9d8c3282-271e-421c-a888-02fbf35deaa9 Status: Created Snapshot Count: 0 Number of Bricks: 2 x 2 = 4 Transport-type: tcp Bricks: Brick1: node1:/b3 Brick2: node2:/b3 Brick3: node3:/b3 Brick4: node4:/b3 Options Reconfigured: transport.address-family: inet nfs.disable: on [root@localhost ~]# gluster volume start dis-stripe volume start: dis-stripe: success
[root@localhost ~]# gluster volume create dis-rep replica 2 node1:/c4 node2:/c4 node3:/c4 node4:/c4 force //指定類型爲replica,數值爲2,並且後面跟了4個Brick Server,是2的2倍,因此建立的是分佈式複製卷 volume create: dis-rep: success: please start the volume to access data [root@localhost ~]# gluster volume info dis-rep Volume Name: dis-rep Type: Distributed-Replicate Volume ID: 6536cc9c-a3bd-4276-940d-62eccbed7580 Status: Created Snapshot Count: 0 Number of Bricks: 2 x 2 = 4 Transport-type: tcp Bricks: Brick1: node1:/c4 Brick2: node2:/c4 Brick3: node3:/c4 Brick4: node4:/c4 Options Reconfigured: transport.address-family: inet nfs.disable: on [root@localhost ~]# gluster volume start dis-rep volume start: dis-rep: success
如下全部操做都是在客戶端進行操做的!
在客戶端上也需安裝glusterfs軟件包,實驗環境可以使用互聯網自行下載,也可指定yum倉庫的實際絕對路徑。資源在網盤連接中。
[root@localhost ~]# yum -y install glusterfs glusterfs-fuse //安裝客戶端所需軟件
[root@localhost ~]# mkdir -p /test/{dis,stripe,rep,dis_and_stripe,dis_and_rep} [root@localhost ~]# ls /test dis dis_and_rep dis_and_stripe rep stripe
[root@localhost ~]# vim /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.1.1 node1 192.168.1.2 node2 192.168.1.3 node3 192.168.1.4 node4
[root@localhost ~]# mount -t glusterfs node1:dis-volume /test/dis [root@localhost ~]# mount -t glusterfs node1:stripe-volume /test/stripe [root@localhost ~]# mount -t glusterfs node1:rep-volume /test/rep [root@localhost ~]# mount -t glusterfs node1:dis-stripe /test/dis_and_stripe [root@localhost ~]# mount -t glusterfs node1:dis-rep /test/dis_and_rep [root@localhost ~]# df -h //因爲查詢結果含有違禁字符,自行查看!
若是掛載過程當中出現失敗,請檢查host配置文件及解析狀況!
在掛載時,所指定的node1只是爲了從它那裏獲取到必要的配置信息,在掛載以後,客戶機會與不只僅是node1進行通訊,也會直接和邏輯存儲卷內其餘Brick所在的主機進行通訊。
實驗環境也無須編輯fstab文件,實現自動掛載,企業環境中必然要實現自動掛載,方法以下:
[root@localhost ~]# vim /etc/fstab # # /etc/fstab # Created by anaconda on Fri Sep 20 22:23:11 2019 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # /dev/mapper/cl-root / xfs defaults 0 0 UUID=283094e0-2917-47ec-ac36-ada76feb4105 /boot xfs defaults 0 0 /dev/mapper/cl-swap swap swap defaults 0 0 node1:/dis-volume /test/dis glusterfs defaults,_netdev 0 0 node1:/stripe-volume /test/stripe glusterfs defaults,_netdev 0 0 node1:/rep-volume /test/rep glusterfs defaults,_netdev 0 0 node1:/dis-stripe /test/dis_and_stripe glusterfs defaults,_netdev 0 0 node1:/dis-rep /test/dis_and_rep glusterfs defaults,_netdev 0 0
[root@localhost ~]# ll -h demo* -rw-r--r--. 1 root root 43M 10月 6 11:18 demo1.log -rw-r--r--. 1 root root 43M 10月 6 11:19 demo2.log -rw-r--r--. 1 root root 43M 10月 6 11:42 demo3.log -rw-r--r--. 1 root root 43M 10月 6 11:43 demo4.log -rw-r--r--. 1 root root 43M 10月 6 11:53 demo5.log [root@localhost ~]# cp demo* /test/dis/ [root@localhost ~]# cp demo* /test/stripe/ [root@localhost ~]# cp demo* /test/rep/ [root@localhost ~]# cp demo* /test/dis_and_stripe/ [root@localhost ~]# cp demo* /test/dis_and_rep/ //客戶端建立測試文件
爲了更好的查看效果,節點服務器改名爲node1……4
如下是查看分佈式卷文件分佈狀況:
[root@node1 ~]# ll -h /e6 總用量 172M -rw-r--r--. 2 root root 43M 10月 6 11:55 demo1.log -rw-r--r--. 2 root root 43M 10月 6 11:55 demo2.log -rw-r--r--. 2 root root 43M 10月 6 11:55 demo3.log -rw-r--r--. 2 root root 43M 10月 6 11:55 demo4.log [root@node2 ~]# ll -h /e6 總用量 43M -rw-r--r--. 2 root root 43M 10月 6 11:55 demo5.log //由於分佈式卷不分片,因此都是初始大小
如下是查看條帶卷的分佈狀況:
[root@node1 ~]# ll -h /d5 總用量 108M -rw-r--r--. 2 root root 22M 10月 6 11:55 demo1.log -rw-r--r--. 2 root root 22M 10月 6 11:55 demo2.log -rw-r--r--. 2 root root 22M 10月 6 11:55 demo3.log -rw-r--r--. 2 root root 22M 10月 6 11:55 demo4.log -rw-r--r--. 2 root root 22M 10月 6 11:55 demo5.log [root@node2 ~]# ll -h /d5 總用量 108M -rw-r--r--. 2 root root 22M 10月 6 11:55 demo1.log -rw-r--r--. 2 root root 22M 10月 6 11:55 demo2.log -rw-r--r--. 2 root root 22M 10月 6 11:55 demo3.log -rw-r--r--. 2 root root 22M 10月 6 11:55 demo4.log -rw-r--r--. 2 root root 22M 10月 6 11:55 demo5.log //條帶卷被分紅兩份
如下是查看複製卷文件分佈狀況:
[root@node3 ~]# ll -h /d5 總用量 216M -rw-r--r--. 2 root root 43M 10月 6 11:56 demo1.log -rw-r--r--. 2 root root 43M 10月 6 11:56 demo2.log -rw-r--r--. 2 root root 43M 10月 6 11:56 demo3.log -rw-r--r--. 2 root root 43M 10月 6 11:56 demo4.log -rw-r--r--. 2 root root 43M 10月 6 11:56 demo5.log [root@node4 ~]# ll -h /d5 總用量 216M -rw-r--r--. 2 root root 43M 10月 6 11:56 demo1.log -rw-r--r--. 2 root root 43M 10月 6 11:56 demo2.log -rw-r--r--. 2 root root 43M 10月 6 11:56 demo3.log -rw-r--r--. 2 root root 43M 10月 6 11:56 demo4.log -rw-r--r--. 2 root root 43M 10月 6 11:56 demo5.log //沒有分片原始大小,並且是雙份
如下是查看分佈式條帶卷文件分佈狀況:
[root@node1 ~]# ll -h /b3 總用量 86M -rw-r--r--. 2 root root 22M 10月 6 11:56 demo1.log -rw-r--r--. 2 root root 22M 10月 6 11:56 demo2.log -rw-r--r--. 2 root root 22M 10月 6 11:56 demo3.log -rw-r--r--. 2 root root 22M 10月 6 11:56 demo4.log [root@node2 ~]# ll -h /b3 總用量 87M -rw-r--r--. 2 root root 22M 10月 6 11:56 demo1.log -rw-r--r--. 2 root root 22M 10月 6 11:56 demo2.log -rw-r--r--. 2 root root 22M 10月 6 11:56 demo3.log -rw-r--r--. 2 root root 22M 10月 6 11:56 demo4.log [root@node3 ~]# ll -h /b3 總用量 22M -rw-r--r--. 2 root root 22M 10月 6 11:56 demo5.log [root@node4 ~]# ll -h /b3 總用量 22M -rw-r--r--. 2 root root 22M 10月 6 11:56 demo5.log //大小被分片爲21M、22M
如下是查看分佈式複製卷文件分佈狀況:
[root@node1 ~]# ll -h /c4 總用量 172M -rw-r--r--. 2 root root 43M 10月 6 11:57 demo1.log -rw-r--r--. 2 root root 43M 10月 6 11:57 demo2.log -rw-r--r--. 2 root root 43M 10月 6 11:57 demo3.log -rw-r--r--. 2 root root 43M 10月 6 11:57 demo4.log [root@node2 ~]# ll -h /c4 總用量 173M -rw-r--r--. 2 root root 43M 10月 6 11:57 demo1.log -rw-r--r--. 2 root root 43M 10月 6 11:57 demo2.log -rw-r--r--. 2 root root 43M 10月 6 11:57 demo3.log -rw-r--r--. 2 root root 43M 10月 6 11:57 demo4.log [root@node3 ~]# ll -h /c4 總用量 44M -rw-r--r--. 2 root root 43M 10月 6 11:57 demo5.log [root@node4 ~]# ll -h /c4 總用量 44M -rw-r--r--. 2 root root 43M 10月 6 11:57 demo5.log //沒有被分片,原始大小
掛起node2節點,在客戶端上測試文件是否能夠正常使用。
因爲是實驗環境,數據是/dev/zero中的數據,查看不到;可是若是不能查看報錯的!
查看測試分佈式卷數據是否能夠訪問:
[root@localhost ~]# head -1 /test/dis/demo1.log [root@localhost ~]# head -1 /test/dis/demo2.log [root@localhost ~]# head -1 /test/dis/demo3.log [root@localhost ~]# head -1 /test/dis/demo4.log [root@localhost ~]# head -1 /test/dis/demo5.log head: 沒法打開"/test/dis/demo5.log" 讀取數據: 沒有那個文件或目錄 //分佈在node2節點上的demo5.log沒法訪問,因而可知,分佈式不具有冗餘性。
查看測試條帶卷數據卷是否能夠訪問:
[root@localhost ~]# head -1 /test/stripe/demo1.log head: 讀取"/test/stripe/demo1.log" 時出錯: 沒有那個文件或目錄 [root@localhost ~]# head -1 /test/stripe/demo2.log head: 讀取"/test/stripe/demo2.log" 時出錯: 沒有那個文件或目錄 [root@localhost ~]# head -1 /test/stripe/demo3.log head: 讀取"/test/stripe/demo3.log" 時出錯: 沒有那個文件或目錄 [root@localhost ~]# head -1 /test/stripe/demo4.log head: 讀取"/test/stripe/demo4.log" 時出錯: 沒有那個文件或目錄 [root@localhost ~]# head -1 /test/stripe/demo5.log head: 讀取"/test/stripe/demo5.log" 時出錯: 沒有那個文件或目錄 //node2節點掛起後,數據所有丟失
查看測試分佈式條帶卷數據能夠訪問:
[root@localhost ~]# head -1 /test/dis_and_stripe/demo1.log head: 讀取"/test/dis_and_stripe/demo1.log" 時出錯: 沒有那個文件或目錄 [root@localhost ~]# head -1 /test/dis_and_stripe/demo2.log head: 讀取"/test/dis_and_stripe/demo2.log" 時出錯: 沒有那個文件或目錄 [root@localhost ~]# head -1 /test/dis_and_stripe/demo3.log head: 讀取"/test/dis_and_stripe/demo3.log" 時出錯: 沒有那個文件或目錄 [root@localhost ~]# head -1 /test/dis_and_stripe/demo4.log head: 讀取"/test/dis_and_stripe/demo4.log" 時出錯: 沒有那個文件或目錄 [root@localhost ~]# head -1 /test/dis_and_stripe/demo5.log //node2節點掛起後,分佈在node1和node2節點的數據所有丟失,而分佈在node3和node4節點的數據不丟失
查看測試分佈式複製卷數據是否能夠訪問:
[root@localhost ~]# head -1 /test/dis_and_rep/demo1.log [root@localhost ~]# head -1 /test/dis_and_rep/demo2.log [root@localhost ~]# head -1 /test/dis_and_rep/demo3.log [root@localhost ~]# head -1 /test/dis_and_rep/demo4.log [root@localhost ~]# head -1 /test/dis_and_rep/demo5.log //node2節點掛起後,數據不會丟失
繼續掛起node4節點,在客戶端測試文件是否可使用。
查看測試複製卷數據是否能夠訪問:
[root@localhost ~]# head -1 /test/rep/demo1.log [root@localhost ~]# head -1 /test/rep/demo2.log [root@localhost ~]# head -1 /test/rep/demo3.log [root@localhost ~]# head -1 /test/rep/demo4.log [root@localhost ~]# head -1 /test/rep/demo5.log //即便node2和node4節點掛起後,複製卷數據不會丟失
查看測試分佈式條帶卷數據是否能夠訪問:
[root@localhost ~]# head -1 /test/dis_and_stripe/demo1.log head: 讀取"/test/dis_and_stripe/demo1.log" 時出錯: 沒有那個文件或目錄 [root@localhost ~]# head -1 /test/dis_and_stripe/demo2.log head: 讀取"/test/dis_and_stripe/demo2.log" 時出錯: 沒有那個文件或目錄 [root@localhost ~]# head -1 /test/dis_and_stripe/demo3.log head: 讀取"/test/dis_and_stripe/demo3.log" 時出錯: 沒有那個文件或目錄 [root@localhost ~]# head -1 /test/dis_and_stripe/demo4.log head: 讀取"/test/dis_and_stripe/demo4.log" 時出錯: 沒有那個文件或目錄 [root@localhost ~]# head -1 /test/dis_and_stripe/demo5.log head: 讀取"/test/dis_and_stripe/demo5.log" 時出錯: 沒有那個文件或目錄 //node2和node4節點掛起,分佈式條帶卷數據不能夠訪問
查看分佈式複製卷數據是否能夠訪問:
[root@localhost ~]# head -1 /test/dis_and_rep/demo1.log [root@localhost ~]# head -1 /test/dis_and_rep/demo2.log [root@localhost ~]# head -1 /test/dis_and_rep/demo3.log [root@localhost ~]# head -1 /test/dis_and_rep/demo4.log [root@localhost ~]# head -1 /test/dis_and_rep/demo5.log //node2和node4節點掛起後,分佈式複製卷數據能夠正常訪問
[root@node1 ~]# gluster volume list //查看卷的列表 dis-rep dis-stripe dis-volume rep-volume stripe-volume [root@node1 ~]# gluster volume info // 查看全部卷的詳細信息 Volume Name: dis-rep Type: Distributed-Replicate Volume ID: 6536cc9c-a3bd-4276-940d-62eccbed7580 Status: Started Snapshot Count: 0 Number of Bricks: 2 x 2 = 4 Transport-type: tcp Bricks: Brick1: node1:/c4 Brick2: node2:/c4 Brick3: node3:/c4 Brick4: node4:/c4 Options Reconfigured: transport.address-family: inet …………………… //省略部份內容 [root@node1 ~]# gluster volume status //查看全部卷的狀態 Status of volume: dis-rep Gluster process TCP Port RDMA Port Online Pid ------------------------------------------------------------------------------ Brick node1:/c4 49155 0 Y 44187 Brick node3:/c4 49154 0 Y 43976 Self-heal Daemon on localhost N/A N/A Y 44207 Self-heal Daemon on node3 N/A N/A Y 43996 Task Status of Volume dis-rep ------------------------------------------------------------------------------ There are no active volume tasks Status of volume: dis-stripe Gluster process TCP Port RDMA Port Online Pid ------------------------------------------------------------------------------ Brick node1:/b3 49154 0 Y 44113 Brick node3:/b3 49153 0 Y 43916 Task Status of Volume dis-stripe ------------------------------------------------------------------------------ There are no active volume tasks Status of volume: dis-volume Gluster process TCP Port RDMA Port Online Pid ------------------------------------------------------------------------------ Brick node1:/e6 49152 0 Y 3438 Task Status of Volume dis-volume ------------------------------------------------------------------------------ There are no active volume tasks Status of volume: rep-volume Gluster process TCP Port RDMA Port Online Pid ------------------------------------------------------------------------------ Brick node3:/d5 49152 0 Y 3455 Self-heal Daemon on localhost N/A N/A Y 44207 Self-heal Daemon on node3 N/A N/A Y 43996 Task Status of Volume rep-volume ------------------------------------------------------------------------------ There are no active volume tasks Status of volume: stripe-volume Gluster process TCP Port RDMA Port Online Pid ------------------------------------------------------------------------------ Brick node1:/d5 49153 0 Y 3588 Task Status of Volume stripe-volume ------------------------------------------------------------------------------ There are no active volume tasks
[root@node1 ~]# gluster volume stop dis-stripe //中止一個卷 Stopping volume will make its data inaccessible. Do you want to continue? (y/n) y volume stop: dis-stripe: success [root@node1 ~]# gluster volume delete dis-stripe //刪除一個卷 Deleting volume will erase all information about the volume. Do you want to continue? (y/n) y volume delete: dis-stripe: failed: Some of the peers are down
[root@node1 ~]# gluster volume set dis-rep auth.allow 192.168.1.*,10.1.1.* //設置只容許192.168.1.0網段和10.1.1.0網段的客戶端能夠訪問dis-rep卷 volume set: success
關於GlusterFS分佈式文件系統,基本操做今天就介紹這麼多,若是有什麼經常使用的操做,之後會更新的!
———————— 本文至此結束,感謝閱讀 ————————