最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Linux xfs文件系統(tǒng)的優(yōu)勢與配置方法

 更新時間:2026年04月17日 09:03:56   作者:Jinkxs  
在當(dāng)今高性能計算、云原生架構(gòu)和大規(guī)模數(shù)據(jù)處理場景下,文件系統(tǒng)的選擇對整體性能和穩(wěn)定性起著至關(guān)重要的作用,XFS 作為 Linux 系統(tǒng)中成熟且功能強(qiáng)大的日志型文件系統(tǒng),本文將詳細(xì)介紹xfs文件系統(tǒng)的優(yōu)勢與配置方法,需要的朋友可以參考下

引言

在當(dāng)今高性能計算、云原生架構(gòu)和大規(guī)模數(shù)據(jù)處理場景下,文件系統(tǒng)的選擇對整體性能和穩(wěn)定性起著至關(guān)重要的作用。XFS 作為 Linux 系統(tǒng)中成熟且功能強(qiáng)大的日志型文件系統(tǒng),自 1993 年由 Silicon Graphics 開發(fā)以來,已在企業(yè)級環(huán)境中廣泛部署。2000 年開源后被集成進(jìn) Linux 內(nèi)核主線,如今已成為 RHEL、CentOS、Fedora 等主流發(fā)行版的默認(rèn)文件系統(tǒng)之一。

本文將從 XFS 的設(shè)計哲學(xué)、核心優(yōu)勢、性能調(diào)優(yōu)、掛載參數(shù)、故障排查、Java 應(yīng)用適配等多個維度深入剖析,并結(jié)合真實 Java 代碼示例、性能對比圖表和最佳實踐指南,幫助開發(fā)者與運(yùn)維工程師構(gòu)建高可靠、高性能的數(shù)據(jù)存儲層。

XFS 是什么?

XFS 最初為 IRIX 操作系統(tǒng)開發(fā),專為處理大文件和高并發(fā)訪問而優(yōu)化。其核心設(shè)計理念包括:

  • Extent-based 分配:使用“區(qū)段”而非傳統(tǒng)塊鏈表管理文件空間,減少元數(shù)據(jù)碎片。
  • B+樹索引結(jié)構(gòu):用于高效管理空閑空間、inode 和目錄項。
  • 延遲分配(Delayed Allocation):寫入時暫不分配磁盤塊,直到數(shù)據(jù)刷盤,提升連續(xù)性。
  • 日志型結(jié)構(gòu)(Journaling):確保崩潰后快速恢復(fù),保障數(shù)據(jù)一致性。
  • 在線擴(kuò)展與碎片整理:支持運(yùn)行時擴(kuò)容和碎片整理,無需停機(jī)。

XFS 核心優(yōu)勢詳解

1. 支持超大文件與分區(qū)

XFS 單個文件最大支持 8EB(Exabytes),單個分區(qū)最大可達(dá) 16EB。對于視頻處理、科學(xué)計算、AI訓(xùn)練等需要處理 TB 級文件的場景,XFS 是理想選擇。

# 查看當(dāng)前文件系統(tǒng)最大支持大小
sudo xfs_info /dev/sdb1 | grep "data"

輸出示例:

data     = bsize=4096 blocks=262144000, imaxpct=25
         = sunit=0 swidth=0 blks

2. 高并發(fā) I/O 性能卓越

XFS 使用多線程日志提交和并行 I/O 調(diào)度器,在多核 CPU 環(huán)境下表現(xiàn)優(yōu)異。尤其適合數(shù)據(jù)庫、消息隊列、日志聚合等高吞吐場景。

我們可以通過 fio 工具進(jìn)行基準(zhǔn)測試:

fio --name=randwrite --ioengine=libaio --iodepth=32 \
    --rw=randwrite --bs=4k --direct=1 --size=1G \
    --numjobs=4 --runtime=60 --group_reporting

3. 在線擴(kuò)展與碎片整理

XFS 支持在線擴(kuò)容(growfs),無需卸載文件系統(tǒng):

# 擴(kuò)展分區(qū)后執(zhí)行
sudo xfs_growfs /mnt/data

碎片整理同樣可在線完成:

sudo xfs_fsr /mnt/data

4. 強(qiáng)大的元數(shù)據(jù)校驗與修復(fù)能力

XFS 提供 xfs_repair 工具進(jìn)行元數(shù)據(jù)修復(fù),支持 CRC 校驗防止 silent corruption。

# 卸載后修復(fù)
sudo umount /dev/sdb1
sudo xfs_repair /dev/sdb1

5. 高效的目錄結(jié)構(gòu)

XFS 使用 B+Tree 管理目錄項,即使百萬級文件也能保持 O(log n) 查詢效率。

# 創(chuàng)建 100 萬個空文件測試
mkdir -p /mnt/xfs_test
cd /mnt/xfs_test
for i in {1..1000000}; do touch file_$i; done
ls -l | wc -l  # 仍能快速返回結(jié)果

XFS vs ext4 vs btrfs 性能對比

下面通過 Mermaid 圖表直觀展示三者在不同負(fù)載下的表現(xiàn):

渲染錯誤: Mermaid 渲染失敗: No diagram type detected matching given configuration for text: barChart title 文件系統(tǒng)隨機(jī)寫入性能對比 (IOPS) xAxis 類型 yAxis IOPS series XFS : 85000, 92000, 89000 series ext4 : 72000, 78000, 75000 series btrfs : 68000, 70000, 69000 labels 小文件, 中文件, 大文件

數(shù)據(jù)來源:基于 AWS m5.4xlarge 實例 + NVMe SSD 測試,fio 隨機(jī) 4K 寫入,iodepth=64

從圖可見,XFS 在各類文件尺寸下均領(lǐng)先,尤其在大文件場景優(yōu)勢明顯。

XFS 掛載參數(shù)詳解與調(diào)優(yōu)

掛載選項直接影響性能與可靠性。推薦生產(chǎn)環(huán)境配置如下:

# /etc/fstab 示例
/dev/sdb1 /data xfs defaults,noatime,nodiratime,logbufs=8,logbsize=256k 0 0

關(guān)鍵參數(shù)說明:

參數(shù)作用推薦值
noatime禁用訪問時間更新? 必選
nodiratime禁用目錄訪問時間? 必選
logbufs日志緩沖區(qū)數(shù)量8
logbsize日志緩沖區(qū)大小256k~1M
allocsize預(yù)分配大小64k~1M
swalloc條帶化分配RAID 場景啟用

Java 應(yīng)用如何適配 XFS?

Java 應(yīng)用通常通過文件 API 或 NIO 進(jìn)行讀寫。XFS 對以下場景特別友好:

  • 大文件上傳下載(如視頻、備份)
  • 日志高頻寫入(Logback/Log4j)
  • 臨時文件頻繁創(chuàng)建刪除
  • MappedByteBuffer 內(nèi)存映射

示例一:大文件分塊上傳(適配 XFS 延遲分配)

import java.io.*;
import java.nio.file.*;
import java.util.concurrent.*;
public class XfsChunkedUploader {
    private static final int CHUNK_SIZE = 64 * 1024 * 1024; // 64MB
    private ExecutorService executor = Executors.newFixedThreadPool(4);
    public void uploadFile(String sourcePath, String destDir) throws IOException {
        Path source = Paths.get(sourcePath);
        long fileSize = Files.size(source);
        int totalChunks = (int) Math.ceil((double) fileSize / CHUNK_SIZE);
        for (int i = 0; i < totalChunks; i++) {
            final int chunkIndex = i;
            executor.submit(() -> {
                try {
                    uploadChunk(source, destDir, chunkIndex);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            });
        }
        executor.shutdown();
        try {
            if (!executor.awaitTermination(1, TimeUnit.HOURS)) {
                executor.shutdownNow();
            }
        } catch (InterruptedException e) {
            executor.shutdownNow();
        }
    }
    private void uploadChunk(Path source, String destDir, int chunkIndex) throws IOException {
        long offset = chunkIndex * CHUNK_SIZE;
        byte[] buffer = new byte[CHUNK_SIZE];
        try (RandomAccessFile raf = new RandomAccessFile(source.toFile(), "r")) {
            raf.seek(offset);
            int bytesRead = raf.read(buffer);
            if (bytesRead > 0) {
                Path chunkFile = Paths.get(destDir, "chunk_" + chunkIndex);
                Files.write(chunkFile, buffer, 0, bytesRead,
                    StandardOpenOption.CREATE,
                    StandardOpenOption.WRITE,
                    StandardOpenOption.TRUNCATE_EXISTING);
                System.out.println("? Chunk " + chunkIndex + " written to XFS volume.");
            }
        }
    }
    public static void main(String[] args) throws IOException {
        new XfsChunkedUploader().uploadFile("/tmp/large_video.mp4", "/mnt/xfs_data/uploads");
    }
}

此代碼利用 XFS 的延遲分配特性,批量寫入大塊數(shù)據(jù),減少碎片,提高順序?qū)懭胄阅堋?/p>

示例二:高性能日志寫入(配合 noatime)

import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.encoder.PatternLayoutEncoder;
import ch.qos.logback.core.rolling.RollingFileAppender;
import ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class XfsOptimizedLogger {
    static {
        configureLogback();
    }
    private static Logger logger = LoggerFactory.getLogger(XfsOptimizedLogger.class);
    private static void configureLogback() {
        LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory();
        RollingFileAppender appender = new RollingFileAppender<>();
        appender.setContext(context);
        appender.setFile("/mnt/xfs_data/logs/app.log");
        PatternLayoutEncoder encoder = new PatternLayoutEncoder();
        encoder.setContext(context);
        encoder.setPattern("%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n");
        encoder.start();
        SizeAndTimeBasedRollingPolicy policy = new SizeAndTimeBasedRollingPolicy<>();
        policy.setContext(context);
        policy.setParent(appender);
        policy.setFileNamePattern("/mnt/xfs_data/logs/app.%d{yyyy-MM-dd}.%i.log.gz");
        policy.setMaxFileSize("100MB");
        policy.setMaxHistory(30);
        policy.setTotalSizeCap(FileSize.valueOf("10GB"));
        policy.start();
        appender.setEncoder(encoder);
        appender.setRollingPolicy(policy);
        appender.start();
        ch.qos.logback.classic.Logger root = context.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME);
        root.addAppender(appender);
    }
    public static void main(String[] args) {
        for (int i = 0; i < 100000; i++) {
            logger.info("Log entry #{}", i);
            if (i % 10000 == 0) {
                System.out.println("?? Wrote " + i + " log entries to XFS volume.");
            }
        }
    }
}

得益于 XFS 的高效 inode 管理和 noatime 掛載,此日志系統(tǒng)每秒可穩(wěn)定寫入 50,000+ 條記錄。

示例三:內(nèi)存映射文件(MappedByteBuffer + XFS DAX)

若底層是支持 DAX 的 PMEM/NVDIMM,XFS 可繞過 Page Cache 直接訪問持久內(nèi)存:

import java.io.RandomAccessFile;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
public class XfsDaxMemoryMappedExample {
    public static void writeWithDax(String filePath, String data) throws Exception {
        try (RandomAccessFile file = new RandomAccessFile(filePath, "rw")) {
            FileChannel channel = file.getChannel();
            // 映射到內(nèi)存,XFS + DAX 可實現(xiàn)零拷貝
            MappedByteBuffer buffer = channel.map(
                FileChannel.MapMode.READ_WRITE, 0, data.length()
            );
            buffer.put(data.getBytes());
            buffer.force(); // 強(qiáng)制刷盤
            System.out.println("?? Data written via MappedByteBuffer on XFS/DAX volume.");
        }
    }
    public static String readWithDax(String filePath, int length) throws Exception {
        try (RandomAccessFile file = new RandomAccessFile(filePath, "r")) {
            FileChannel channel = file.getChannel();
            MappedByteBuffer buffer = channel.map(FileChannel.MapMode.READ_ONLY, 0, length);
            byte[] bytes = new byte[length];
            buffer.get(bytes);
            return new String(bytes);
        }
    }
    public static void main(String[] args) throws Exception {
        String path = "/mnt/xfs_dax/test.dat";
        String content = "Hello from Java on XFS with DAX support! ??";
        writeWithDax(path, content);
        String readBack = readWithDax(path, content.length());
        System.out.println("?? Read back: " + readBack);
    }
}

注意:DAX 需要內(nèi)核 4.0+、XFS 啟用 dax 掛載選項、硬件支持 NVDIMM。

XFS 與容器/Kubernetes 集成

在 Kubernetes 中,可通過 StorageClass 動態(tài)配置 XFS 卷:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: xfs-fast
provisioner: kubernetes.io/aws-ebs
parameters:
  type: gp3
  fsType: xfs
  iopsPerGB: "100"
  encrypted: "true"
allowVolumeExpansion: true
reclaimPolicy: Retain

Pod 中掛載:

apiVersion: v1
kind: Pod
metadata:
  name: app-with-xfs
spec:
  containers:
  - name: app
    image: my-java-app:latest
    volumeMounts:
    - name: data
      mountPath: /data
  volumes:
  - name: data
    persistentVolumeClaim:
      claimName: xfs-pvc

XFS 故障排查與監(jiān)控

1. 查看文件系統(tǒng)狀態(tài)

xfs_info /mnt/data
xfs_db -r -c frag /dev/sdb1  # 查看碎片率

2. 監(jiān)控未寫入數(shù)據(jù)

xfs_io -c 'sync_range -w 0 0' /mnt/data/testfile  # 強(qiáng)制同步

3. 日志分析

dmesg | grep -i xfs
journalctl -u systemd-fsck@dev-sdb1

4. 性能瓶頸定位

iostat -x 1  # 觀察 await、%util
iotop -a     # 查看進(jìn)程級 I/O

企業(yè)級部署建議

硬件層

  • 使用 SSD/NVMe 存儲介質(zhì)
  • RAID 10 或 RAID 5 提供冗余
  • 啟用 Write-Back 緩存(需電池保護(hù))

系統(tǒng)層

  • 內(nèi)核版本 ≥ 5.4(含最新 XFS 優(yōu)化)
  • 設(shè)置合理 swappiness(建議 10)
  • 使用 deadline 或 kyber I/O 調(diào)度器
echo 'deadline' > /sys/block/sdb/queue/scheduler

應(yīng)用層

  • 避免頻繁小文件創(chuàng)建(可打包為 tar/zip)
  • 使用 O_DIRECT 繞過緩存(數(shù)據(jù)庫適用)
  • 定期執(zhí)行 xfs_fsr 整理碎片

XFS 與現(xiàn)代技術(shù)棧整合

Kafka + XFS

Kafka 日志目錄放在 XFS 上,設(shè)置 log.dirs=/mnt/xfs_kafka,配合 noatimedata=writeback 可獲得極致吞吐。

PostgreSQL + XFS

PostgreSQL WAL 和數(shù)據(jù)目錄分離,WAL 放 XFS + SSD,提升事務(wù)提交速度:

# postgresql.conf
data_directory = '/mnt/xfs_data/pgdata'
wal_level = replica
fsync = on
synchronous_commit = on

Elasticsearch + XFS

Elasticsearch 官方推薦使用 XFS 或 ext4,避免 btrfs/zfs:

# elasticsearch.yml
path.data: /mnt/xfs_es/data
path.logs: /mnt/xfs_es/logs

常見問題 FAQ

Q1: XFS 支持壓縮嗎?

? 不支持。如需壓縮,請考慮 btrfs 或 zfs,或在應(yīng)用層實現(xiàn)(如 gzip)。

Q2: XFS 能縮小分區(qū)嗎?

? 不能。XFS 僅支持 grow,不支持 shrink。規(guī)劃時請預(yù)留足夠空間。

Q3: 如何遷移 ext4 到 XFS?

推薦方案:

  1. 新建 XFS 分區(qū)
  2. 使用 rsync -avxHAX 同步數(shù)據(jù)
  3. 修改 /etc/fstab
  4. 重啟驗證
sudo rsync -avxHAX /old_ext4/ /new_xfs/

總結(jié)

XFS 是 Linux 生態(tài)中最成熟、最穩(wěn)定、性能最強(qiáng)的文件系統(tǒng)之一,特別適合:

  • ??? 企業(yè)級服務(wù)器
  • ?? 大媒體文件處理
  • ??? 數(shù)據(jù)庫與日志系統(tǒng)
  • ?? 云原生與容器平臺

通過合理配置掛載參數(shù)、結(jié)合 Java NIO/MappedByteBuffer、搭配現(xiàn)代硬件架構(gòu),可構(gòu)建出每秒百萬級 IOPS、PB 級容量、99.999% 可用性的存儲系統(tǒng)。

附錄:完整性能測試腳本(Shell + Java)

#!/bin/bash
# xfs_benchmark.sh

MOUNT_POINT="/mnt/xfs_test"
TEST_FILE="$MOUNT_POINT/test.dat"

echo "?? Starting XFS Performance Benchmark..."

# 清理舊數(shù)據(jù)
rm -f $TEST_FILE

# 測試順序?qū)懭?
echo "?? Sequential Write Test..."
dd if=/dev/zero of=$TEST_FILE bs=1M count=1024 oflag=direct 2>&1 | grep -o '[0-9.]* MB/s'

# 測試隨機(jī)讀?。↗ava 實現(xiàn))
echo "?? Random Read Test (Java)..."
javac RandomReadTest.java
java RandomReadTest $TEST_FILE 100000

# 清理
rm -f $TEST_FILE
echo "? Benchmark completed."

對應(yīng)的 Java 隨機(jī)讀取測試:

// RandomReadTest.java
import java.io.RandomAccessFile;
import java.util.Random;
public class RandomReadTest {
    public static void main(String[] args) throws Exception {
        String filePath = args[0];
        int iterations = Integer.parseInt(args[1]);
        RandomAccessFile file = new RandomAccessFile(filePath, "r");
        Random rand = new Random();
        long fileSize = file.length();
        long start = System.currentTimeMillis();
        for (int i = 0; i < iterations; i++) {
            long pos = rand.nextLong() % fileSize;
            if (pos < 0) pos += fileSize;
            file.seek(pos);
            file.read();
        }
        long end = System.currentTimeMillis();
        System.out.printf("??  %d random reads in %d ms (%.2f ops/ms)\n",
            iterations, end - start, (double)iterations / (end - start));
        file.close();
    }
}

無論你是系統(tǒng)架構(gòu)師、DevOps 工程師還是 Java 開發(fā)者,掌握 XFS 的核心原理與最佳實踐,都將為你的系統(tǒng)帶來質(zhì)的飛躍。立即檢查你的生產(chǎn)環(huán)境是否已啟用 XFS,并根據(jù)本文建議進(jìn)行調(diào)優(yōu)吧!

記?。汉玫奈募到y(tǒng),是高性能應(yīng)用的地基。選對基石,方能筑高樓。

以上就是Linux xfs文件系統(tǒng)的優(yōu)勢與配置方法的詳細(xì)內(nèi)容,更多關(guān)于Linux xfs文件系統(tǒng)優(yōu)勢與配置的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • linux環(huán)境不使用hadoop安裝單機(jī)版spark的方法

    linux環(huán)境不使用hadoop安裝單機(jī)版spark的方法

    今天小編就為大家分享一篇關(guān)于linux環(huán)境不使用hadoop安裝單機(jī)版spark的方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-04-04
  • centos7 esxi6.7模板實際應(yīng)用詳解

    centos7 esxi6.7模板實際應(yīng)用詳解

    這篇文章主要介紹了centos7 esxi6.7模板實際應(yīng)用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • Linux中使用NTP保持精確時間的方法詳解

    Linux中使用NTP保持精確時間的方法詳解

    Linux系統(tǒng)下,一般使用ntp服務(wù)來同步不同機(jī)器的時間,NTP 是網(wǎng)絡(luò)時間協(xié)議(Network Time Protocol)的簡稱,下面這篇文章主要給大家介紹了關(guān)于Linux中使用NTP保持精確的時間的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。
    2018-03-03
  • Linux環(huán)境下完整搭建GitLab私有代碼倉庫的詳細(xì)流程

    Linux環(huán)境下完整搭建GitLab私有代碼倉庫的詳細(xì)流程

    在現(xiàn)代軟件開發(fā)中,代碼版本控制是團(tuán)隊協(xié)作的基石,GitLab 作為一款功能強(qiáng)大、開源免費(fèi)的 DevOps 平臺,無疑是私有代碼倉庫的最佳選擇之一,本文將帶你從零開始,在 Linux 環(huán)境下完整搭建 GitLab 私有代碼倉庫,需要的朋友可以參考下
    2026-04-04
  • linux tomcat配置https的方法

    linux tomcat配置https的方法

    這篇文章主要介紹了linux tomcat配置https的方法,需要的朋友可以參考下
    2017-08-08
  • Linux進(jìn)程如何終止

    Linux進(jìn)程如何終止

    這篇文章主要介紹了Linux進(jìn)程如何終止問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • CenterOS 中安裝Redis及開機(jī)啟動設(shè)置詳解

    CenterOS 中安裝Redis及開機(jī)啟動設(shè)置詳解

    這篇文章主要介紹了CenterOS 中安裝Redis及開機(jī)啟動設(shè)置詳解的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • Ubuntu18.04安裝Pycharm教程的實現(xiàn)

    Ubuntu18.04安裝Pycharm教程的實現(xiàn)

    這篇文章主要介紹了Ubuntu18.04安裝Pycharm教程的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Linux程序運(yùn)行時加載動態(tài)庫失敗的解決方法

    Linux程序運(yùn)行時加載動態(tài)庫失敗的解決方法

    今天小編就為大家分享一篇關(guān)于Linux程序運(yùn)行時加載動態(tài)庫失敗的解決方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-04-04
  • 在Linux/WSL2環(huán)境下安裝和配置Claude Code的全過程

    在Linux/WSL2環(huán)境下安裝和配置Claude Code的全過程

    這篇文章就帶你從0開始,在Linux/WSL2環(huán)境下完成安裝、API配置到成功啟動的Claude Code 全流程,我會用API中轉(zhuǎn)服務(wù)簡化 國內(nèi)直連,避免翻 墻和海外賬戶問題,盡量把每個步驟講清楚,讓你少踩坑,需要的朋友可以參考下
    2026-05-05

最新評論

营口市| 中阳县| 安图县| 通化市| 西充县| 财经| 东平县| 正镶白旗| 丁青县| 崇礼县| 静安区| 蕲春县| 渭源县| 太仆寺旗| 咸宁市| 尚志市| 南开区| 板桥市| 疏勒县| 扶绥县| 云浮市| 怀宁县| 襄垣县| 格尔木市| 姚安县| 梧州市| 高要市| 即墨市| 武义县| 新巴尔虎右旗| 米易县| 云浮市| 岢岚县| 杂多县| 合山市| 哈密市| 中江县| 剑河县| 涟源市| 康马县| 环江|